我有一系列子图,但每当我尝试降低刻度密度甚至改变格式时,值似乎都会发生变化。
这是一个独立的情节:France
这是我尝试的(EDITED)代码:
import matplotlib as mpl
from matplotlib.ticker import FormatStrFormatter
f, axarr = plt.subplots(5,6,figsize=(30,30))
for i in range(0,6):
for j in range(0,5):
# there are only 26 entries in ser
if (4*i+j) < 26:
x = pp_gdp.loc[pp_gdp.index == ser.index[4*i+j],:].round(1)
y = ser.loc[ser.index == ser.index[4*i+j],:].round(1)
axarr[j,i].scatter(x,y)
axarr[j,i].set_title(ser.index[4*i+j])
xt = axarr[j,i].get_xticks()
#axarr[j,i].set_xscale('linear')
axarr[j,i].set_xticks([axarr[j,i].get_xticks()[0],int(len(axarr[j,i].get_xticks())/2), axarr[j,i].get_xticks()[-1]])
axarr[j,i].set_xticklabels([x.values.min(),sorted(x.values)[0][int(len(xt)/2)],x.values.max()])
yt = axarr[j,i].get_yticks()
#axarr[j,i].set_yscale('linear')
axarr[j,i].set_yticks([axarr[j,i].get_yticks()[0],int(len(axarr[j,i].get_yticks())/2), axarr[j,i].get_yticks()[-1]])
axarr[j,i].set_yticklabels([y.values.min(),sorted(y.values)[0][int(len(yt)/2)],y.values.max()]);
如果我注释掉所有的刻度代码,即默认的子图,我会得到的结果如下: Default plot
正如你所看到的,它太密集了,无法阅读。
这是我尝试nbins时会发生什么:
axarr[j,i].locator_params(tight=True, axis='y', nbins=10)
axarr[j,i].locator_params(tight=True, axis='x', nbins=5)
同样,两个轴上的值都是错误的。
使用get_xticks和set_xticks作为大代码样本的一部分作品,但破坏了情节的直觉。由于它保持0的方式,因此规模也是错误的。
非线性图保持线性,但斜率被夸大了。更复杂的情节完全失去了形状,如: China now wrong
右边的图表更难理解,只是因为规模并不好看。
用我的新
谢谢, 罗伊
答案 0 :(得分:0)
基于bgamari's answer to this question,我建议玩mpl.pyplot.locator_params(axis='x', nticks=4)
。
答案 1 :(得分:0)
我不知道为什么,但似乎在子图中从2个不同的数据框中拉出来让它非常不开心。
将一个数组附加到另一个数组然后从中创建子图似乎可以解决我的所有问题:
pp_gdp_1 = pp_gdp.loc[pp_gdp.index.isin(ser.index), :]
pp_gdp_s = pp_gdp_1.append(ser)
f, axarr = plt.subplots(7,4,figsize=(30,30))
for i in range(0,4):
for j in range(0,7):
# there are only 26 entries in ser
if (7*i+j) < 26:
x = pp_gdp_s.iloc[7*i+j].round(1)
y = pp_gdp_s.iloc[(7*i+j)+len(ser)].round(1)
axarr[j,i].scatter(x,y)
axarr[j,i].set_title(ser.index[7*i+j])
axarr[j,i].xaxis.set_major_locator(MaxNLocator(5))
axarr[j,i].yaxis.set_major_locator(MaxNLocator(5))
这会产生我一次一个地绘制它们时会得到的结果: Grid of good plots