我正在尝试将值放在条之间的plt.yticks
中。不幸的是,我不知道该怎么做。有可能吗?如果有人可以给一些提示?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
age = np.array(
["0 - 4", "5 - 9", "10 - 14", "15 - 19", "20 - 24", "25 - 29", "30 - 34", "35 - 39",
"40 - 44", "45 - 49", "50 - 54", "55 - 59", "60 - 64", "65 - 69", "70 - 74",
"75 - 79", "80 - 84", "85 - 89", "90 - 94", "95 - 99", "> 100"])
m = np.array(
[1915887, 2100931, 2494484, 2464805, 2361297, 2529633, 2669927, 2754129, 2753282,
2552531, 2211649, 1697221, 1311024, 902675, 722246, 482686, 273915, 108639, 35867,
10965, 1238])
f = np.array(
[1823981, 1980712, 2369795, 2435784, 2330223, 2562964, 2724990, 2860720, 2918730,
2713534, 2376384, 1869867, 1454373, 1030677, 885393, 640698, 388748, 172302, 64170,
19868, 2711])
x = np.arange(age.size)
tick_lab = ['3M', '2M', '1M', '1M', '2M', '3M']
tick_val = [-3000000, -2000000, -1000000, 1000000, 2000000, 3000000]
def plot_pyramid():
plt.barh(x, -m, alpha=.75, height=.75, align='center' , color="deepskyblue")
plt.barh(x, f, alpha=.75, height=.75, align='center', color="pink")
plt.yticks(x, age)
plt.xticks(tick_val, tick_lab)
plt.grid(b=False)
plt.title("Population Pyramid")
plt.show()
if __name__ == '__main__':
plot_pyramid()
答案 0 :(得分:1)
我只是将以下两行替换为plt.barh
行,并在函数内plt.title
之后添加了for循环,并用ax.set_yticks(False)
替换了plt.yticks([])
。我不确定这是否正是您想要的。
# Modified before the function because you are shifting the bars left/right
tick_val = np.array([-3000000, -2000000, -1000000, 1000000, 2000000, 3000000])
shift = 300000
tick_val[0:3] -= shift
tick_val[3:] += shift
# Modified inside the function
plt.barh(x, -m, alpha=.75, height=.75, left=-shift, align='center' , color="deepskyblue")
plt.barh(x, f, alpha=.75, height=.75, left = shift, align='center', color="pink")
for i, j in enumerate(age):
if i==0 or i==1:
plt.text(-150000, x[i]-0.2, j, fontsize=10)
else:
plt.text(-230000, x[i]-0.2, j, fontsize=10)
输出