如何使用 MATPLOTLIB 重置 x 轴值

问题描述 投票:0回答:1

我目前正在运行 matplotlib,特别是使用 YouTube 上的 Corey Schafer 教程(第 2 部分)一切进展顺利。除了图表的选择,我注意到其中一个数据集的条形图在 x 轴上过于混乱。

这让我开始思考,有没有一种方法可以增加我的报价? IE 不是显示 18-55 之间的每个刻度,而是增加 3 或 5(或更多)以便看起来更好?我注意到当我运行一个线图时它会自动增加 10.

代码:

import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np



agesx = [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
          36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]

py_devy = [20046, 17100, 20000, 24744, 30500, 37732, 41247, 45372, 48876, 53850, 57287, 63016, 65998, 70003, 70000, 71496, 75370, 83640, 84666,
            84392, 78254, 85000, 87038, 91991, 100000, 94796, 97962, 93302, 99240, 102736, 112285, 100771, 104708, 108423, 101407, 112542, 122870, 120000]

js_devy = [16446, 16791, 18942, 21780, 25704, 29000, 34372, 37810, 43515, 46823, 49293, 53437, 56373, 62375, 66674, 68745, 68746, 74583, 79000,
            78508, 79996, 80403, 83820, 88833, 91660, 87892, 96243, 90000, 99313, 91660, 102264, 100000, 100000, 91660, 99240, 108000, 105000, 104000]

all_devy = [17784, 16500, 18012, 20628, 25206, 30252, 34368, 38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752, 77232,
         78000, 78508, 79536, 82488, 88935, 90000, 90056, 95000, 90000, 91633, 91660, 98150, 98964, 100000, 98988, 100000, 108923, 105000, 103117]


width = 0.25
x_indexes = np.arange(len(agesx))

 
plt.xticks(ticks=x_indexes,labels=agesx)


plt.style.use("seaborn-dark")
plt.bar(x_indexes-width, all_devy, width=width, label= "All Devs")
plt.bar(x_indexes,py_devy,width=width, label= "Python Devs")
plt.bar(x_indexes + width, js_devy, width=width, label= "Javascript Dev")

plt.title("Median Developer Salaries by Age (USD)")
plt.xlabel("Ages")
plt.ylabel("Salary (USD)")
plt.tight_layout()

plt.legend()
plt.show()


这导致下图: Graph1

最初我以为我可以解决这个问题

plt.xticks(np.arange(18,55,3))

但是它会导致这个输出:

AttemptedGraph

我如何修改它以使图形从 18 开始而不是从位置 18 开始刻度?

python matplotlib
1个回答
0
投票

如果我们使用

matplotlib.pyplot
subplot
那么我们可以迭代
get_xticks()
并使用
agesx
索引
list-comprehension
中的标签以获得
_xticklabels
并将该
list
设置为
xticklabels
:

import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np

agesx = [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
          36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]

py_devy = [20046, 17100, 20000, 24744, 30500, 37732, 41247, 45372, 48876, 53850, 57287, 63016, 65998, 70003, 70000, 71496, 75370, 83640, 84666,
            84392, 78254, 85000, 87038, 91991, 100000, 94796, 97962, 93302, 99240, 102736, 112285, 100771, 104708, 108423, 101407, 112542, 122870, 120000]

js_devy = [16446, 16791, 18942, 21780, 25704, 29000, 34372, 37810, 43515, 46823, 49293, 53437, 56373, 62375, 66674, 68745, 68746, 74583, 79000,
            78508, 79996, 80403, 83820, 88833, 91660, 87892, 96243, 90000, 99313, 91660, 102264, 100000, 100000, 91660, 99240, 108000, 105000, 104000]

all_devy = [17784, 16500, 18012, 20628, 25206, 30252, 34368, 38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752, 77232,
         78000, 78508, 79536, 82488, 88935, 90000, 90056, 95000, 90000, 91633, 91660, 98150, 98964, 100000, 98988, 100000, 108923, 105000, 103117]


width = 0.25
x_indexes = np.arange(len(agesx))
#plt.xticks(ticks=x_indexes,labels=agesx)

ax = plt.subplot(1, 1, 1)
plt.style.use("seaborn-dark")
ax.bar(x_indexes-width, all_devy, width=width, label= "All Devs")
ax.bar(x_indexes,py_devy,width=width, label= "Python Devs")
ax.bar(x_indexes + width, js_devy, width=width, label= "Javascript Dev")

ax.set_title("Median Developer Salaries by Age (USD)")
ax.set_xlabel("Ages")
ax.set_ylabel("Salary (USD)")
plt.tight_layout()
_xticklabels = [agesx[int(_x)] for _x in ax.get_xticks() if int(_x) < len(agesx)]
ax.set_xticklabels(_xticklabels)
ax.legend()
plt.show()

输出:

© www.soinside.com 2019 - 2024. All rights reserved.