已为我提供了一个我需要查找histogram
的数据。因此,我使用了熊猫hist()
函数,并使用matplotlib
对其进行了绘制。该代码在远程服务器上运行,因此我无法直接看到它,因此保存了图像。这是图片的样子
这是我的下面的代码
import matplotlib.pyplot as plt
df_hist = pd.DataFrame(np.array(raw_data)).hist(bins=5) // raw_data is the data supplied to me
plt.savefig('/path/to/file.png')
plt.close()
如您所见,x轴标签重叠。所以我像这样使用了此功能plt.tight_layout()
import matplotlib.pyplot as plt
df_hist = pd.DataFrame(np.array(raw_data)).hist(bins=5)
plt.tight_layout()
plt.savefig('/path/to/file.png')
plt.close()
现在有一些改进
但是标签仍然太靠近。有没有办法确保标签彼此不接触并且标签之间有合理的间距?我也想调整图像大小以使其更小。
我在https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html处检查了文档,但不确定savefig
使用哪个参数。
答案 0 :(得分:1)
由于raw_data
尚未成为pandas
数据框,因此无需将其转换为一个即可进行绘制。相反,您可以直接使用matplotlib进行绘图。
有很多方法可以实现您想要的。我将从设置一些与您的数据相似的数据开始:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gamma
raw_data = gamma.rvs(a=1, scale=1e6, size=100)
如果我们继续使用matplotlib创建直方图,我们可能会发现xticks过于靠近:
fig, ax = plt.subplots(1, 1, figsize=[5, 3])
ax.hist(raw_data, bins=5)
fig.tight_layout()
无论间距如何,都很难用所有零读取xticks。因此,您可能希望做的一件事就是使用科学格式。这使x轴更容易理解:
ax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
不使用科学格式的另一种选择是旋转刻度线(如评论中所述):
ax.tick_params(axis='x', rotation=45)
fig.tight_layout()
最后,您还提到了更改图像的大小。请注意,最好在初始化图形时完成此操作。您可以使用figsize
参数设置图形的大小。下面将创建一个5英寸宽,3英寸高的图形:
fig, ax = plt.subplots(1, 1, figsize=[5, 3])
答案 1 :(得分:1)
我认为Pam在评论中提到了两个最佳解决方案。 您可以使用 plt.xticks(旋转= 45 有关更多信息,请参见此处:Rotate axis text in python matplotlib
真正的问题是太多的零,没有提供任何额外的信息。 Numpy数组非常易于使用,因此pd.DataFrame(np.array(raw_data)/1000).hist(bins=5)
应该摆脱两个轴上的三个零。然后只需在轴标签中添加一个“千”。
要更改图形的大小,请使用rcParams。
from matplotlib import rcParams
rcParams['figure.figsize'] = 7, 5.75 #the numbers are the dimensions