如何使用matplotlib设置自定义y轴自动收报机范围

时间:2018-01-31 17:28:49

标签: python matplotlib

我可以使用分配给重量和日期的默认值创建一个图形(见下图),但我想使用自定义范围作为重量。

因此,不是使用数组中的最小值/最大值,而是希望范围为175-190,间隔为.05。

我尝试了很多东西,但通常会发生的事情是两件事中的一件......

1。)所有重量范围都被卡在左上角并显示在彼此之上

2。)y轴上没有显示任何内容,也没有绘制点。

def displayplot(date, weight):
    fig, ax = plt.subplots()

    #Convert data types in more usuable types
    dates = mdates.num2date(mdates.datestr2num(date))
    x = np.array(dates)
    y = np.array(weight).astype(np.float)


    #set plot points and formatting
    plt.plot(dates, weight, color='k', marker='o', label='January', linewidth=1,
             markevery=1,markerfacecolor='blue')

    #set limits
    #ax.set_ylim(175,190)

    # rotate and align the tick labels so they look better
    fig.autofmt_xdate()

    #Labels
    ax.set_title('weight tracking - 2018')
    plt.xlabel('Date')
    plt.ylabel('Weight')
    plt.legend()

    #Show figure
    plt.show(fig)

enter image description here

enter image description here

更新1:

def displayplot(date, weight):
    fig, ax = plt.subplots()

    #Convert data types in more usuable types
    dates = mdates.num2date(mdates.datestr2num(date))
    x = np.array(dates)
    y = np.array(weight).astype(np.float)
    rng = np.arange(175, 190.5, 0.5)



    #set plot points and formatting
    plt.plot(dates, weight, color='k', marker='o', label='January', linewidth=1,
             markevery=1,markerfacecolor='blue')

    #set limits
    ax.set_yticks(rng)
    # rotate and align the tick labels so they look better
    fig.autofmt_xdate()

enter image description here

更新2:版本2.1.2

2 个答案:

答案 0 :(得分:0)

您可以使用yticks设置ax.set_yticks(rng)。您可以使用numpy.arange创建rng。在您的情况下rng = np.arange(175, 190.5, 0.5)

答案 1 :(得分:0)

您可以使用ax.set_yticklabels()显示y_ticks。你想确保那些属于y_lim。

def displayplot(日期,重量):     fig,ax = plt.subplots()

#Convert data types in more usuable types
#dates = mdates.num2date(mdates.datestr2num(date))
dates = date
x = np.array(dates)
y = np.array(weight).astype(np.float)


#set plot points and formatting
plt.plot(dates, weight, color='k', marker='o', label='January', linewidth=1,
         markevery=1,markerfacecolor='blue')

#set limits
#ax.set_ylim(175,190)
y_ticks = np.arange(175, 190, 0.5)
ax.set_ylim([y_ticks[0] - 0.5, y_ticks[-1] + 0.5])
ax.set_yticklabels(y_ticks)

# rotate and align the tick labels so they look better
fig.autofmt_xdate()

#Labels
ax.set_title('weight tracking - 2018')
plt.xlabel('Date')
plt.ylabel('Weight')
plt.legend()

#Show figure
plt.show(fig)

我生成了一些假数据来显示它的样子

date = np.arange(30)
weight = 180 + np.random.normal(5, size=30)
displayplot(date, weight)

enter image description here