【问题标题】:Force Y axis to start from 0强制 Y 轴从 0 开始
【发布时间】:2020-06-28 14:42:01
【问题描述】:

我是否有一个简单的方法可以强制左 y 轴从 0% 而不是 48% 开始?

这是我的代码:

fig, ax1 = plt.subplots(figsize=(18,12))
fig.autofmt_xdate()

#update ticks here when graph gets too large
tick_spacing = 5
#y_tick_spacing = 20

ax1.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
color = 'tab:blue'
ax1.set_xlabel('Date',fontsize=18)
ax1.plot(events_df['dt'], events_df['match_rate'], color=color)
ax1.tick_params(axis='y', labelcolor=color)
#ax1.set_ylim([0,100])
ax1.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
#ax1.yaxis.set_major_locator(ticker.MultipleLocator(y_tick_spacing))

ax2 = ax1.twinx()

color = 'tab:red'
ax2.plot(events_df['dt'], events_df['score'], color=color)
ax2.tick_params(axis='y', labelcolor=color)
ax2.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))

fig.tight_layout()
plt.show()

我尝试添加 ax1.set_ylim([0,100]) 但这似乎没有效果,反而会挤压东西:

我对从 35% 开始的右 y 轴感到满意。

这是我希望从相同数据的谷歌表格版本中获得的结果:

【问题讨论】:

    标签: python python-3.x dataframe matplotlib formatting


    【解决方案1】:

    检查此代码:

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import matplotlib.ticker as mtick
    import numpy as np
    
    events_df = pd.DataFrame({'dt': pd.date_range(start = '2020-02-01', end = '2020-05-16')})
    events_df['match_rate'] = 100*(0.48 + (0.9 - 0.48)*np.random.rand(len(events_df.index)))
    events_df['score'] = 100*(0.35 + (1 - 0.35)*np.random.rand(len(events_df.index)))
    
    fig, ax1 = plt.subplots(figsize=(18,12))
    fig.autofmt_xdate()
    
    tick_spacing = 5
    
    ax1.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
    color = 'tab:blue'
    ax1.set_xlabel('Date',fontsize=18)
    ax1.plot(events_df['dt'], events_df['match_rate'], color=color)
    ax1.tick_params(axis='y', labelcolor=color)
    ax1.yaxis.set_major_formatter(mtick.PercentFormatter())
    ax1.set_ylim([0, 100])
    
    ax2 = ax1.twinx()
    
    color = 'tab:red'
    ax2.plot(events_df['dt'], events_df['score'], color=color)
    ax2.tick_params(axis='y', labelcolor=color)
    ax2.yaxis.set_major_formatter(mtick.PercentFormatter())
    
    fig.tight_layout()
    plt.show()
    

    这给了我这个情节:

    由于我没有你的数据,我随机生成一个以制作情节;用你的替换它们。
    在我的例子中,'match_rate''score' 列是 float,分别在 (48-90)(35-100) 范围内。所以我设置了

    ax1.yaxis.set_major_formatter(mtick.PercentFormatter())
    

    告诉 matplotlib y 轴有一个百分比格式,然后我设置它的限制

    ax1.set_ylim([0, 100])
    

    这取决于您在'match_rate''score' 列中拥有的数据类型:了解它们会很有用。

    【讨论】:

    • 谢谢!成功了,这些列确实是浮动的。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2022-01-28
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多