(Matplotlib)是否在y轴上放置自定义值?

2024-10-04 05:23:32 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使y轴的范围为0-450000,增量值为50000。我相信我已经将正确的技术与“plt.yticks(np.arange(045000150000))”结合在一起了,我不明白为什么我运行它时所有的y轴值都消失了。我也试过了 “ax=plt.gca() ax.set_ylim([0450000])” 这些数字在y轴的底部看起来很模糊。这是到目前为止我的代码

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import rcParams
import numpy as np
%matplotlib inline

rcParams['figure.figsize'] = 20,10
df = pd.read_csv('https://raw.githubusercontent.com/ObiP1/The-Future-Value-of-Homes/master/AverageHomeValues.csv')

plt.title('Median Cost Of Maryland Homes', fontsize=30)
plt.ylabel('Median Price Of Home',fontsize=25)

plt.yticks(np.arange(0,450001,50000))

plt.xlabel('Year', fontsize=25)
plt.plot(df.YEAR, df.MED_COST)
plt.grid(True)

Tags: csvimportdfmatplotlibasnppltax
2条回答

问题是MED_COST列是字符串,而不是数字。这些字符串用作记号标签,但对于0,1,2,3,4,5,...处的记号位置,在0, 50000, ...处设置记号位置将使所有内容都不可见,记号0除外

因此,将这些字符串转换为数字应该可以解决问题。它们可以通过^{}显示为货币。与显式设置记号不同,^{}是另一个选项,用于防止在新数据可用时重新计算记号

由于plot可以更改某些设置,因此首先调用plot,然后再设置标签和记号可能会有所帮助

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
import numpy as np
from matplotlib import ticker

rcParams['figure.figsize'] = 20, 10

df = pd.DataFrame({
    'YEAR': [1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020],
    'MED_COST': ['$31500', '$48700', '$58600', '$71800', '$115400', '$148800', '$146000', '$250242', '$295000']})
# make the 'MED_COST' column numeric
df.MED_COST = [int(m[1:]) for m in df.MED_COST]

plt.plot(df.YEAR, df.MED_COST)
plt.title('Median Cost Of Maryland Homes', fontsize=30)
plt.ylabel('Median Price Of Home', fontsize=25)

plt.xlabel('Year', fontsize=25)
plt.yticks(np.arange(0, 450001, 50000))
# plt.gca().yaxis.set_major_locator(ticker.MultipleLocator(50000))
plt.gca().yaxis.set_major_formatter(ticker.StrMethodFormatter('${x:,.0f}'))

plt.grid(True)
plt.show()

resulting plot

问题是$字符串不是被解释为值,而是被解释为字符串(这行看起来很直,不是吗?)。如果将其转换为(as here),则会得到以下结果:

enter image description here

df = pd.read_csv('https://raw.githubusercontent.com/ObiP1/The-Future-Value-of-Homes/master/AverageHomeValues.csv')
df[df.columns[1:]] = df[df.columns[1:]].replace('[\$,]', '', regex=True).astype(float)

plt.title('Median Cost Of Maryland Homes', fontsize=30)
plt.ylabel('Median Price Of Home',fontsize=25)

plt.yticks(np.arange(0,450001,50000))

plt.xlabel('Year', fontsize=25)
plt.plot(df.YEAR, df.MED_COST, 'o')
plt.grid(True)

相关问题 更多 >