我想在matplotlib中按照圖庫中的示例製作分組條形圖。我用的是以下幾點:matplotlib中分組條形圖之間的設置間隔
import matplotlib.pyplot as plt
plt.figure(figsize=(7,7), dpi=300)
xticks = [0.1, 1.1]
groups = [[1.04, 0.96],
[1.69, 4.02]]
group_labels = ["G1", "G2"]
num_items = len(group_labels)
ind = arange(num_items)
width = 0.1
s = plt.subplot(1,1,1)
for num, vals in enumerate(groups):
print "plotting: ", vals
group_len = len(vals)
gene_rects = plt.bar(ind, vals, width,
align="center")
ind = ind + width
num_groups = len(group_labels)
# Make label centered with respect to group of bars
# Is there a less complicated way?
offset = (num_groups/2.) * width
xticks = arange(num_groups) + offset
s.set_xticks(xticks)
print "xticks: ", xticks
plt.xlim([0 - width, max(xticks) + (num_groups * width)])
s.set_xticklabels(group_labels)
我的問題是:
如何控制酒吧的羣體之間的空間?現在間距很大,看起來很愚蠢。請注意,我不想讓這些條更寬 - 我希望它們具有相同的寬度,但要靠得更近。
我怎樣才能讓標籤在棒組下面居中?我試圖想出一些算術計算來將xlabels放置在正確的位置(參見上面的代碼),但它仍然略微偏離......這有點像寫一個繪圖庫而不是使用一個。這怎麼解決? (是否有包裝或內置實用工具matplotlib哪裏,這是默認的行爲?)
編輯:回覆@mlgill:感謝您的回答。你的代碼當然更優雅,但仍然存在相同的問題,即條形的寬度和組之間的間距不能單獨控制。你的圖看起來是正確的,但是酒吧太寬 - 看起來像一個Excel圖 - 我想讓酒吧變得更薄。
寬度和利潤率現在鏈接,所以如果我嘗試:
margin = 0.60
width = (1.-2.*margin)/num_items
這使得巴瘦,但帶來的組相距甚遠,所以情節再次看起來不正確的。
如何製作一個帶有兩個參數的分組條形圖函數:每個條形的寬度以及條形組之間的間距,並像代碼一樣正確地繪製它,即以x軸標籤爲中心團體?
我覺得,既然用戶有來計算具體的低層次的佈局數量一樣保證金和寬度,我們仍然基本上可以寫一個繪圖庫:)
另外,請注意一旦我的註釋被刪除,大大減少的命令數量。雖然我認爲Matplotlib的繪圖功能可以在某些方面使用較小的改進,但這當然不再像寫一個繪圖庫。 :) – 2012-07-22 20:43:00
感謝您的評論,我在編輯回覆我的主要帖子。 – user248237dfsf 2012-07-22 21:20:53
從上面所寫的內容來看,聽起來好像您要麼讓整個圖形的寬度更小(這可以在創建圖形的行中設置),或者希望邊距本身更大,這將保持寬高比相同。您還可以調整寬度和xdata計算,以便在每個小節之間留有餘量。完成這個只需要基本的代數。除了這三個想法之外,我不知道你在問什麼。 – 2012-07-22 21:42:56