m0_57965808 2021-12-13 20:42 采纳率: 90.9%
浏览 200
已结题

用matplotlib画图但是Y轴数据过于紧凑该怎么办?

问题相关代码,请勿粘贴截图
from pandas.plotting import register_matplotlib_converters
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import xlwt
import requests
import re
import json
import platform
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]
#print(f)
#print(x)
#print(z)
listx=json.loads(x)
listf=json.loads(f)
listz=json.loads(z)
#print(listx)
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)
# 为日期转换做准备


register_matplotlib_converters()

# 读取数据 修改字段名,选择6列数据


# 准备画布
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)

# 画折线
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'))

# 显示
plt.show()

img

我的解答思路和尝试过的方法

我原本是打算用ax.yaxis.set_major_locator但是效果并不理想。

我想要达到的结果

让它看起来正常点,能看,能用就好了。

  • 写回答

1条回答 默认 最新

  • 陈年椰子 2021-12-13 21:02
    关注

    还在折腾呀

    # 设置日期的格式
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y%m'))
    
    # 在显示前,加这三行
    from matplotlib.ticker import MultipleLocator, FormatStrFormatter
    ymajorLocator   = MultipleLocator(10)   # 这个10改成5也可以。
    ax.yaxis.set_major_locator(ymajorLocator)
    # 这三行
    
    # 显示
    plt.show()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 创建了问题 12月13日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。