m0_57965808 2021-12-14 19:28 采纳率: 90.9%
浏览 33
已结题

matplotlib坐标轴刻度数据颜色无法更改

问题遇到的现象和发生背景

用matplotlib画了一个有着三条折线的图,但是Y轴的数据因为大小不一的关系,如果无法将不同折线的数据用不同颜色分开的话会导致这个图表用起来十分困难。

问题相关代码,请勿粘贴截图

代码

运行结果及报错内容

from pandas.plotting import register_matplotlib_converters
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import requests
import json
from matplotlib.collections import EventCollection

#获取数据部分:
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53'}
req=requests.get('http://money.finance.sina.com.cn/forex/api/jsonp.php/SINAREMOTECALLCALLBACK.CALLBACK_1637050185601883563512783069/FusionChart_Service.getForexChartInfo?country=%D6%D0%B9%FA&event=%B2%C6%D0%C2%D7%DB%BA%CFPMI&datefrom=2017-03-03&dateto=2021-11-0-3&allinfo=1&npp=20&page=1'
,headers=head)
freq=requests.get('http://money.finance.sina.com.cn/forex/api/jsonp.php/SINAREMOTECALLCALLBACK.CALLBACK_163737461216346743293146016707/FusionChart_Service.getForexChartInfo?country=%D6%D0%B9%FA&event=%B2%C6%D0%C2%B7%FE%CE%F1%D2%B5PMI&datefrom=2017-03-03&dateto=2021-11-0-3&allinfo=1&npp=20&page=1'
,headers=head)
zreq=requests.get('http://money.finance.sina.com.cn/forex/api/jsonp.php/SINAREMOTECALLCALLBACK.CALLBACK_1637374612163737673381537736465096858196/FusionChart_Service.getForexChartInfo?country=%D6%D0%B9%FA&event=%B2%C6%D0%C2%D6%C6%D4%EC%D2%B5PMI&datefrom=2017-03-03&dateto=2021-11-0-3&allinfo=1&npp=20&page=1',
  headers=head)
req=req.text
freq=freq.text
zreq=zreq.text
x=req[118:2642]
f=freq[120:2700]
z=zreq[130:2712]
listx=json.loads(x)
listf=json.loads(f)
listz=json.loads(z)
x_data=[]
y_data=[]
fx_data=[]
fy_data=[]
zx_data=[]
zy_data=[]
for i in listx:
    riqi=i['date']
    shuzhi=i['ifr_actual']
    #print(riqi,shuzhi)
    x_data.append(riqi)
    y_data.append(shuzhi)
for o in listf:
    friqi=o['date']
    fshuzi=o['ifr_actual']
    #print(friqi,fshuzi)
    fx_data.append(friqi)
    fy_data.append(fshuzi)
for t in listz:
    zriqi=t['date']
    zshuzhi=t['ifr_actual']
    #print(zriqi,zshuzhi)
    zx_data.append(zriqi)
    zy_data.append(zshuzhi)


#matplotlib画图部分:



# 为日期转换做准备
register_matplotlib_converters()
# 准备画布
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

# 获取日期列表
x = pd.to_datetime(x_data)
y = pd.to_datetime(fx_data)
z = pd.to_datetime(zx_data)

yevents1 = EventCollection(y_data, color='tab:blue', linelength=0.05,
                           orientation='vertical')
yevents2 = EventCollection(fy_data, color='tab:orange', linelength=0.05,
                           orientation='vertical')
yevents3 = EventCollection(zy_data, color='tab:red', linelength=0.05,
                           orientation='vertical')
ax.add_collection(yevents1)
ax.add_collection(yevents2)
ax.add_collection(yevents3)

# 画折线
ax.plot(x, y_data, color='tab:blue')
ax.plot(y, fy_data, color='tab:orange')
ax.plot(z, zy_data, color='tab:green')

# 设置月定位符 , 按季度显示,否则太挤了
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=3))  # interval = 3 季度

# 设置日期的格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y%m'))
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
ymajorLocator   = MultipleLocator(5)   # 这个10改成5也可以。
ax.yaxis.set_major_locator(ymajorLocator)


# 显示
plt.show()

我想要达到的结果

希望能让最后出来的y轴数据的颜色和折线颜色一致

  • 写回答

1条回答 默认 最新

  • 陈年椰子 2021-12-14 22:58
    关注

    不太明白问题。
    Y 轴只有1条,折线有3条。咋换颜色呀?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日
  • 创建了问题 12月14日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备