python - 尝试使用 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()
解决方案
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]' 参数中指定的唯一内容时才允许使用十六进制字符串颜色
推荐阅读
- sql - 在多列列表框中水平显示 SQL 查询的结果
- mysql - 如何访问虚拟盒子中的mysql到mac终端
- ansible - 在 ansible playbook 中使用 vars_prompt 时出错
- sql-server - 获取百分比的表达式
- mongodb - 使用 mongodb 在 docker 上备份和恢复 Rocket.chat
- android - 使用 parse android sdk 抛出异常
- sql - Oracle SQL REGEXP_SUBSTR() 和 SUBSTR() 问题
- java - 防止每个 JUnit 测试的 Spring bean 重新初始化
- python - 将 sqlalchemy-continuum 与 flask-sqlalchemy 和 flask-migrate 一起使用
- optimization - 如何将参数从excel导出到游戏?