首页 > 解决方案 > 尝试使用 matplotlib、图例中的双条目和没有 y 轴标签来绘制 DataFrame

问题描述

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

我正在尝试创建一个显示三条线(平均值、最小值和最大值)的图,并将 STD 显示为平均值周围的阴影区域。它有效,但我遇到了一个问题,即 y 标签不显示,并且图例条目加倍,除了 STD。问题似乎出在 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()

标签: pythonmatplotlibplot

解决方案


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]' 参数中指定的唯一内容时才允许使用十六进制字符串颜色


推荐阅读