Python matplotlib中的通用图例
我正在matplotlib中绘制网格。我有一个3*2的子地块网格,如下所示: 我在每个子图中绘制折线图,每种颜色的线指定一个类别。 让我们假设color_name={cat1:red,cat2:black,…} 现在,颜色的含义在每个子图中都是相同的,但它们可能只包含颜色名称dict类别的子集。我需要一个包含dict color_名称中颜色类别对的绘图的通用图例。 我已经搜索了很多,但我没有找到一种方法直接使用dict制作图例,以便只包含dict中的每个键值对一次。 这里X轴包含日期,y值表示每天 代码:Python matplotlib中的通用图例,python,matplotlib,charts,legend,Python,Matplotlib,Charts,Legend,我正在matplotlib中绘制网格。我有一个3*2的子地块网格,如下所示: 我在每个子图中绘制折线图,每种颜色的线指定一个类别。 让我们假设color_name={cat1:red,cat2:black,…} 现在,颜色的含义在每个子图中都是相同的,但它们可能只包含颜色名称dict类别的子集。我需要一个包含dict color_名称中颜色类别对的绘图的通用图例。 我已经搜索了很多,但我没有找到一种方法直接使用dict制作图例,以便只包含dict中的每个键值对一次。 这里X轴包含日期,y值表示
def graph_data(data):
''' Return html for graph for one department '''
fig, axes = plt.subplots( nrows=3,
ncols=2,
sharex = True,
figsize=(14, 10),
facecolor = 'w' ,
)
rownames = sorted(data.keys())
beautify(fig, axes, rownames )
plt.close()
color_name = get_color_name_dict()
for i, metric in enumerate(sorted(data.keys())):
for j, device in enumerate(sorted(data[metric].keys())):
ax = axes[i , j]
ylow = 10000
yhigh = 0
for page in data[metric][device].keys():
dd = data[metric][device][page]
x = dd.keys()
y = [statify(dd[_date]) for _date in x]
ylow = min(ylow , min(y))
yhigh = max(yhigh, max(y))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
ax.xaxis.set_major_locator(mdates.DayLocator())
ax.plot(y , color = color_name[page], label = page , linewidth = '2')
ax.fmt_xdata = mdates.DateFormatter('%d-%m-%Y')
for tick in ax.get_xticklabels():
tick.set_rotation(45)
fig.autofmt_xdate()
ax.set_ylim([ylow-200 , yhigh+200])
fig.tight_layout()
# tight_layout doesn't take these labels into account. We'll need
# to make some room. These numbers are are manually tweaked.
fig.subplots_adjust(left=0.18, top=0.95, right=0.95, bottom = 0.05)
imgdata = cStringIO.StringIO()
fig.savefig(imgdata, format='png' , facecolor = fig.get_facecolor())
s = '<img alt = "embedded" src = "data:image/png;base64,%s"/>' % imgdata.getvalue().encode("base64").strip()
orig_stdout = sys.stdout
f = open("test.html" , "w")
sys.stdout = f
print s
sys.stdout = orig_stdout
f.close()
print "done"
mpld3.show(fig)
#return s
您必须使用
figlegend
:如果您需要更多详细信息,请发布您的代码。非常感谢,它真的很有帮助:)
def beautify(fig, axes, rows):
''' Beautify the plot '''
style.use('ggplot')
cols = ['Desktop' , 'Mobile']
for ax in axes[:,0]:
ax.set_ylabel("Median (ms)")
pad = 5 # in points
for ax, col_name in zip(axes[0], cols):
ax.annotate(col_name, xy=(0.5, 1), xytext=(0, pad),
xycoords='axes fraction', textcoords='offset points',
size='large', ha='center', va='baseline')
for ax, row_name in zip(axes[:,0], rows):
ax.annotate(row_name, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad - pad, 0),
xycoords=ax.yaxis.label, textcoords='offset points',
size='large', ha='right', va='center')