我对matplotlib还比较新,进展缓慢。话虽如此,我还没有找到一个明显的答案来解决这个问题。
我想要给散点图按组着色,看起来通过循环绘制是可行的方法。
以下是我根据上面提供的第一个链接创建的可复现示例:
取消注释
这里有一个相关的问题,但我没有直接绘制一个
我想要给散点图按组着色,看起来通过循环绘制是可行的方法。
以下是我根据上面提供的第一个链接创建的可复现示例:
import matplotlib.pyplot as plt
import pandas as pd
from pydataset import data
df = data('mtcars').iloc[0:10]
df['car'] = df.index
fig, ax = plt.subplots(1)
plt.figure(figsize=(12, 9))
for ind in df.index:
ax.scatter(df.loc[ind, 'wt'], df.loc[ind, 'mpg'], label=ind)
ax.legend(bbox_to_anchor=(1.05, 1), loc=2)
# plt.show()
# plt.savefig('file.png')
取消注释
plt.show()
会得到我想要的结果。
搜索一番,看起来plt.savefig()
是保存文件的方法;如果我重新注释掉plt.show()
并运行plt.savefig()
,得到的是一张空白的图片。这个问题表明在调用savefig()
之前调用show()
可能会导致这个问题,但是我已经完全注释掉了它。另一个问题中有一个评论建议我可以直接保存ax
对象,但是那样会截断我的图例:
同一个问题有一个替代方案,可以使用 fig.savefig()
。我得到了相同的被截断的图例。这里有一个相关的问题,但我没有直接绘制一个
DataFrame
,所以不确定如何应用答案(其中 dtf
是他们正在绘制的 pd.DataFrame
)。plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")
谢谢任何建议。
编辑:为了测试下面的建议,尝试使用tight_layout()
,我运行了这个命令,但仍然得到一个空白的白色图像文件:
fig, ax = plt.subplots(1)
plt.figure(figsize=(12, 9))
for ind in df.index:
ax.scatter(df.loc[ind, 'wt'], df.loc[ind, 'mpg'], label=ind)
ax.legend(bbox_to_anchor=(1.05, 1), loc=2)
fig.tight_layout()
plt.savefig('test.png')
plt.tight_layout()
吗?这可能会有所帮助。 - lkrienerplt.figure(figsize=(20,10))
。 - lkrienertight_layout
建议,我更新了回答并提供了我正在运行的内容。一个答案(即使只是草稿)或者要点概括将会非常有帮助以确保我们之间的理解是相同的。我的意思是,我认为我在两者结合起来使用。 - HendyR
,在那里data(mtcars)
是相当标准的。我不知道在python
中这是常见的做法。 - Hendy