簡體   English   中英

在第二個 y 軸上繪制帶有最后一項的條形圖

[英]Plot bar chart with last item in a secondary y-axis

我使用下面的代碼來生成這個圖: 在此處輸入圖片說明 但是,我只想讓 data1 和 data 2(F 列)的最后一個值使用輔助 y 軸,因為它們比以前的值高得多。 有人會知道我怎么能這樣做嗎? 我感謝您的幫助!

x_label = ['A', 'B', 'C', 'D', 'E', 'F']
x_pos = np.arange(len(x_label))
data1 = [1,3,2,5,8,67]
data2 = [1,3,2,5,12,45]

# Build the plot
fig, ax = plt.subplots()
fontsize = 14
ax.bar(x_pos, data1, align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='r', label='data1')
ax.bar(x_pos+0.2, data2, align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='b', label='data2')

ax.set_xticks(x_pos)
ax.set_xticklabels(x_label, fontsize=fontsize)
plt.grid()
plt.show()

您的問題找到了兩種解決方案:一種是具有不同限制的左右軸(下面的第一個代碼)。 第二個在於使用對數標度。 請注意,通常首選第二種解決方案。

解決方案 1:輔助軸(不是最好的)

import matplotlib.pyplot as plt
import numpy as np

x_label = ['A', 'B', 'C', 'D', 'E', 'F']
x_pos = np.arange(len(x_label))
data1 = [1,3,2,5,8,67]
data2 = [1,3,2,5,12,45]

# Build the plot
fig, ax = plt.subplots()
fontsize = 14

ax2 = ax.twinx()

# all but F
ax.bar(x_pos[:-1], data1[:-1], align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='r', label='data1')
ax.bar(x_pos[:-1]+0.2, data2[:-1], align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='b', label='data2')

# F
ax2.bar([x_pos[-1]], [data1[-1]], align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='r', label='data1')
ax2.bar([x_pos[-1]+0.2], [data2[-1]], align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='b', label='data2')

ax.set_xticks(x_pos)
ax.set_xticklabels(x_label, fontsize=fontsize)
plt.grid()
plt.show()

這會產生下面的圖像。 問題是我們無法判斷哪些條屬於右軸,除非我們更改顏色,但在這種情況下,它將不再與左條的顏色代碼對應。

帶雙軸桿

解決方案 2:使用對數刻度(更干凈)

import matplotlib.pyplot as plt
import numpy as np

x_label = ['A', 'B', 'C', 'D', 'E', 'F']
x_pos = np.arange(len(x_label))
data1 = [1,3,2,5,8,67]
data2 = [1,3,2,5,12,45]

# Build the plot
fig, ax = plt.subplots()
fontsize = 14

ax.bar(x_pos, data1, align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='r', label='data1')
ax.bar(x_pos+0.2, data2, align='center', alpha=0.5, ecolor='black',
       capsize=3, width=0.2, color='b', label='data2')

ax.set_xticks(x_pos)
ax.set_xticklabels(x_label, fontsize=fontsize)
ax.set_yscale('log')
plt.grid()
plt.show()

這產生了下面的圖像。 現在每個條形都顯示在同一軸上,並帶有一個對數刻度軸。 具有大動態范圍的數據通常以對數刻度顯示。

對數刻度條

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM