如何在matplotlib中缩小x轴上的绘图?

时间:2014-09-23 21:40:58

标签: python matplotlib

我已经看过几个例子,但这些图的构造方式不同,我不知道如何使语法有效。这是我的代码:

pdf_file = PdfPages(sys.argv[1].split('.')[0] + "_graphs.pdf")
for i in range(0, len(list_of_data)):
  biorep = int(list_of_figure_key[i].split('.')[1])
  construct = int(list_of_figure_key[i].split('.')[0].split('_')[1])
  plot(time, list_of_data[i], color=color_dict[construct], linestyle=linestyle_dict[biorep], label=list_of_figure_key[i] )
  xlabel('time (hours)', fontsize=9)
  ylabel(ReadType, fontsize=9)
  xlim(min(time),max(time))
  legend(fontsize=8, loc='center left', bbox_to_anchor=(1, .5))
pdf_file.savefig()

它产生了一个美丽的身材,但传说太长了,离开了页面的边缘。我想缩小x轴上的绘图,以便图例适合作为2列图例。

图中可以看到:http://i.imgur.com/mvgzIhj.jpg

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用ncol图例属性制作两列图例。您可以通过在绘图上绘制轴并固定其大小来缩小绘图的宽度:

from matplotlib import pyplot as plt
fig = plt.figure()                      # initialize figure
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # add axis

为了使你的代码可以正常工作,这样的事情应该有效:

# import pyplot
from matplotlib import pyplot as plt

# set up filename to save it
pdf_file = PdfPages(sys.argv[1].split('.')[0] + "_graphs.pdf")

# set up axis object
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

# plot your data
for i in range(0, len(list_of_data)):
    biorep = int(list_of_figure_key[i].split('.')[1])
    construct = int(list_of_figure_key[i].split('.')[0].split('_')[1])
    ax.plot(time, list_of_data[i], color=color_dict[construct],
        linestyle=linestyle_dict[biorep], label=list_of_figure_key[i] )

# modify axis limits and legend 
ax.set_xlabel('time (hours)', fontsize=9)
ax.set_ylabel(ReadType, fontsize=9)
ax.set_xlim(min(time),max(time))
ax.legend(fontsize=8, loc='upper left', bbox_to_anchor=(1, .5), ncol=2)

# save final figure
plt.savefig(pdf_file)

在您的代码中,您在for循环的每次迭代中重新构建图例,限制和图例,以及保存然后覆盖pdf图像。这不是必要的 - 你最后可以做一次。

有关更多图例提示,this post非常方便。 This one也很有用。