0
我想在一個窗口中使用matplotlib顯示兩個極座標圖。這是使用子圖實現的。每個子圖都使用this解決方案創建。如何在一幅圖中顯示不同縮放軸的多個雷達圖?
雷達類處理單個雷達圖表的創建:然後將兩個圖是使用this溶液合併
class Radar:
def __init__(self, fig, titles, labels, ylimit, lines, rect=None):
if rect is None:
rect = [0.2, 0.2, 0.6, 0.6]
self.n = len(titles)
self.angles = np.arange(90, 90 + 360, 360.0/self.n)
self.axes = [fig.add_axes(rect, projection="polar", label="axes%d" % i) for i in range(self.n)]
self.ax = self.axes[0]
self.ax.set_thetagrids(self.angles, labels=titles, fontsize=14)
for ax in self.axes[1:]:
ax.patch.set_visible(False)
ax.grid("off")
ax.xaxis.set_visible(False)
for ax, angle, label in zip(self.axes, self.angles, labels):
ax.set_rgrids(lines, angle=angle, labels=label)
ax.spines["polar"].set_visible(False)
ax.set_ylim(ylimit[0], ylimit[1])
def plot(self, values, *args, **kw):
angle = np.deg2rad(np.r_[self.angles, self.angles[0]])
values = np.r_[values, values[0]]
return self.ax.plot(angle, values, *args, **kw)
下面的代碼,以便用於創建兩個雷達圖表和將它們添加到一個圖:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import Line2D
fig1 = plt.figure(figsize=(9, 9))
plt.ioff()
#############################
# first radar chart
#############################
titles = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
lbl_count = 7
upper_bound = 70
values = [0, 10, 40, 30, 20, 50, 30, 40]
labels1 = np.tile(np.arange(-60 + upper_bound/lbl_count, 20, upper_bound/lbl_count), (8, 1))
lines1 = np.arange(10, upper_bound, 10)
radar1 = Radar(fig1, titles, labels1, (0, upper_bound), lines1)
plt1 = radar1.plot(values, "-", lw=2, color="b", alpha=0.4, label="Fitness") # type: List[Line2D]
#############################
# second radar chart
#############################
fig2 = plt.figure(figsize=(9, 9))
values = [0.4, 0.7, 0.2, 0.1, 0.8, 0.3, 0.5, 0.7]
lbl_count = 5
labels2 = [list("12345"), [0.1, 0.2, 0.3, 0.4, 0.5], list("54321"), [10, 8, 6, 4, 2], list("12345"), list("12345"), list("12345"), list("12345")]
lines2 = np.arange(0.2, 1.2, 0.2)
radar2 = Radar(fig2, titles, labels2, (0, 1), lines2)
plt2 = radar2.plot(values, "-", lw=2, color="b", alpha=0.4, label="Values")
plt3 = radar2.plot([0.1, 0.2, 0.5, 0.2, 0.1, 0.7, 0.4, 0.2], "-", lw=2, color="r", alpha=0.4, label="Critical Thresholds")
#############################
# combine radar charts
#############################
fig3, (ax1, ax2) = plt.subplots(1, 2, subplot_kw=dict(projection='polar'), figsize=(25, 15))
line1, = ax1.plot(plt1[0].get_xdata(), plt1[0].get_ydata(), 'g-', label="Fitness")
line2, = ax2.plot(plt2[0].get_xdata(), plt2[0].get_ydata(), 'b-', label="Values")
line3, = ax2.plot(plt3[0].get_xdata(), plt3[0].get_ydata(), 'r-', label="Critical Thresholds")
ax1.set_ylim(0, 80)
ax2.set_ylim(0, 1)
plt.tight_layout()
plt.show()
plt.close()
兩個數字組合之後,用不同的比例的標籤都消失(圖1和2是所希望的結果,而將合併的圖3中缺少一些標貼)
如何添加缺少的標籤?
你應該表現出一個完整的[MCVE]這個問題的,否則它是不可能的,看看此時你的方法失敗。另外請注意,根據matplotlib術語,您的問題很難理解,「子圖」和「軸」是相同的,所以在談論座標軸時,不清楚您是指座標軸還是子圖的複數。 – ImportanceOfBeingErnest
我澄清了我的問題,但似乎無法獲得格式化權限,因此我無法提交我的編輯內容......您知道我可以在哪裏獲得幫助嗎?編輯抱怨格式不正確的代碼,即使所有插入的代碼都使用STRG + K – user2035039
進行了格式化我從來沒有遇到過類似的問題。在最糟糕的情況下,您可以放入代碼而無需格式化,我或其他人可以嘗試正確編輯它?您也可能會投入到pastebin.com或類似的,並可以嘗試編輯它。 – ImportanceOfBeingErnest