3
A
回答
1
您可以定義您自己的圖例鍵。
我的答案中的條形圖使用matplotlib barchart demo創建。 (我已經刪除了錯誤欄)。 matplotlib legend guide解釋瞭如何定義一個類來用橢圓替換圖例鍵。我已修改該類以使用方塊(使用rectangle patches)。
import numpy as np
from matplotlib.legend_handler import HandlerPatch
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
# Define square (rectangular) patches
# that can be used as legend keys
# (this code is based on the legend guide example)
class HandlerSquare(HandlerPatch):
def create_artists(self, legend, orig_handle,
xdescent, ydescent, width, height, fontsize, trans):
center = xdescent + 0.5 * (width - height), ydescent
p = mpatches.Rectangle(xy=center, width=height,
height=height, angle=0.0)
self.update_prop(p, orig_handle, legend)
p.set_transform(trans)
return [p]
# this example is the matplotlib barchart example:
N = 5
menMeans = (20, 35, 30, 35, 27)
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars
fig, ax = plt.subplots()
rects1 = ax.bar(ind, menMeans, width, color='r')
womenMeans = (25, 32, 34, 20, 25)
rects2 = ax.bar(ind+width, womenMeans, width, color='y')
# add some text for labels, title and axes ticks
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind+width)
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5'))
# append the new patches to the legend-call:
ax.legend((rects1[0], rects2[0]), ('Men', 'Women'),
handler_map={rects1[0]: HandlerSquare(), rects2[0]: HandlerSquare()})
plt.show()
在定義了class HandlerSquare
,一個現在可以將此每個圖例項作爲第三個參數ax.legend
通話。注意語法:
handler_map={rects1[0]: HandlerSquare(), rects2[0]: HandlerSquare()}
handler_map
必須是字典。
這會給你這樣的情節:
5
如果你想有一個非常快速和骯髒的解決方案,以獲得近似方形(可能需要一些微調取決於你的情節),你可以調整傳說中的handlelength
克瓦格。繼Schorsch的解決方案(即一旦你有長方形的傳奇藝術家和相應的標籤列表):
ax.legend((rects1[0], rects2[0]), ('Men', 'Women'), handlelength=0.7)
更多信息請參見matplotlib legend()
docs。
1
修改handlelength
全局影響圖例中其他標記的寬度。因此該解決方案將不兼容於,例如,點和線補丁的組合。相反,您可以使用Line2D
將一個方形點標記添加到圖例中。您只需將其關聯行設置爲零寬度:
rect1 = mlines.Line2D([], [], marker="s", markersize=30, linewidth=0, color="r")
rect2 = mlines.Line2D([], [], marker="s", markersize=30, linewidth=0, color="y")
ax.legend((rect1, rect2), ('Men', 'Women'))
相關問題
- 1. Matplotlib傳奇不工作
- 2. subplot matplotlib的常見傳奇
- 3. matplotlib長傳奇的名字
- 4. Matplotlib整個傳奇leftaligned
- 5. 製作方軸在matplotlib
- 6. 使用字典來製作matplotlib圖形?
- 7. 如何在matplotlib中製作一排方形圖
- 8. 如何在matplotlib中使用熱圖製作方形子圖?
- 9. 谷歌柱形圖定製傳奇
- 10. 製作彩條傳說中Matplotlib/Cartopy
- 11. 繪製圖形使用matplotlib
- 12. matplotlib:匹配傳奇色彩patchCollection顏色
- 13. matplotlib傳奇標記只有一次
- 14. matplotlib自定義傳奇與孵化
- 15. Matplotlib全球傳奇很多subplots
- 16. 在matplotlib中製作六進制python在方形軸上填充空白空間?
- 17. Matplotlib繪製圖形上的形狀
- 18. 如何在Matplotlib中製作圖形矩形
- 19. 控制操作的奇怪形式--java
- 20. 在matplotlib傳奇設置爲NumPoints不起作用
- 21. matplotlib熱圖 - 繪製奇數指數
- 22. 製作一個正方形
- 23. 如何製作方形圖?
- 24. 製作方形圖像
- 25. 定製ggplot傳奇
- 26. Matplotlib奇數子圖
- 27. 製作4個方塊的正方形
- 28. 繪製多個圖形使用matplotlib
- 29. 繪製matplotlib中的多個條形圖
- 30. 用matplotlib繪製地形數據plot_surface