我已经看过几个例子,但这些图的构造方式不同,我不知道如何使语法有效。这是我的代码:
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
提前致谢!
答案 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图像。这不是必要的 - 你最后可以做一次。