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

用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日

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Matlab求解微分方程,如何用fish2d进行预优?