尝试使用matplotlib,图例中的双项和没有y轴标签绘制DataFrame

时间:2019-01-29 18:52:53

标签: python matplotlib plot

我有一个包含五列的DataFrame:时间,平均值,标准差,最小值和最大值。

我试图创建一个显示三条线的图,均值,最小值和最大值,以及STD以均值周围的阴影区域显示。它可以工作,但是我遇到了一个问题,即除了STD之外,y标签没有显示,图例条目也加倍了。问题似乎出在plt.plot上,因为当我注释掉三个plt.plot时,所得的plt.fill具有y标签和一个带有图例的图例。这是(https://imgur.com/a/QNVQouk)情节。

from numpy import genfromtxt
my_data = genfromtxt('data_all_1.txt', delimiter=',')

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
import numpy as np

plt.close()

data = pd.DataFrame(my_data,columns=['Frame', 'Mean', 'STD', 'Min', 'Max'])


plt.plot(data.loc[:10,'Frame'], data.loc[:10,'Mean'], '#1f78b4','-', label='Mean temperature')
plt.fill_between(data['Frame'], data['Mean'] - data['STD'], data['Mean'] + data['STD'], facecolor='#a6cee3', label='Standard deviation')
plt.plot(data['Frame'], data['Min'],'#b2df8a' ,'-', label='Minimum temperature')
plt.plot(data['Frame'], data['Max'], '#33a02c','-', label='Maximum temperature')
plt.xlabel('Time, minutes')
plt.ylabel('Temperature $^\circ$C')
plt.legend(loc='lower right') 
plt.show()

1 个答案:

答案 0 :(得分:1)

pyplot.plot将参数作为

plot([x], y, [fmt], data=None, **kwargs)

因此,问题出在您的[fmnt]中,该问题应该在此[[color] [marker] [line]' 默认情况下,如果给定[line],但不提供[marker],则数据将是没有标记的行 您只需删除'-',它就会变成

plt.plot(data.loc[:10,'Frame'], data.loc[:10,'Mean'], '#1f78b4', label='Mean temperature')

如果确实需要同时包含线条样式和颜色(以十六进制表示),则需要在参数中将它们显式指定为

plt.plot(x, y, color='#1f78b4', linestyle='-', label='...')

否则,仅当'[color] [marker] [line]'参数中指定的唯一颜色

时,才允许使用十六进制颜色