Ich versuche, eine polare "Sypter" -Darstellung zu machen, aber ich habe einige Probleme mit den Achsenbeschriftungen. Die Xaxis-Tick-Label scheinen immer auf einer Ebene unterhalb des Y-Achsen-Gitters zu enden (die Buchstaben sind durch die Gitterlinie abgedeckt, wie in der Abbildung unten gezeigt), ich möchte sie oben haben.Axis Label durch Achse in der Handlung versteckt?
Ich habe versucht, die Zorder aber ohne Erfolg einzustellen. Wenn ich die ZOrder der geplotteten Linien über 2 setze, gehen sie oben (in Bezug auf die Ebene) der Achse und des Gitters ... aber ich möchte immer noch, dass die Beschriftungen oben auf der Zeichnung sichtbar sind. Wenn ich sie unter 2 setze, gehen die Linien unter das Gitter. Das Festlegen der Zo- ordnung des Gitters oder der Tick-Labels scheint keine Auswirkungen zu haben.
Hier ist mein Versuch: Wie Sie sehen können, enden die roten Linien des Gitters oben auf dem Text "Industrie", während die graue Linie des Gitters darunter bleibt. Ich würde ‚Industrie‘ gerne sowohl Linie oben sein und von den Stellplätzen
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import random
data = random.sample(range(100), 5)
data[0] = 100
data[3] = 50
index = ['industry', 'residential', 'agriculture', 'transport', 'other']
df1 = pd.DataFrame(data, index=index, columns=['data'])
df2 = pd.DataFrame(np.array(data)/2, index=index, columns=['data'])
fig = plt.figure()
ax = fig.add_subplot(111, projection="polar")
ax.grid(True)
ax.yaxis.grid(color='r')
ax.xaxis.grid(color='#dddddd')
for spine in ax.spines.values():
spine.set_edgecolor('None')
theta = np.arange(len(df1))/float(len(df1))*2.*np.pi
l1, = ax.plot(theta, df1["data"], color="gold", marker="o", label=None, zorder=1) # , zorder = -3)
l2, = ax.plot(theta, df2["data"], color='tomato', marker="o", label=None, zorder=1.1) #, zorder =-2)
def _closeline(line):
x, y = line.get_data()
x = np.concatenate((x, [x[0]]))
y = np.concatenate((y, [y[0]]))
line.set_data(x, y)
[_closeline(l) for l in [l1, l2]]
ax.fill(theta, df1["data"], "gold", alpha=1, zorder=1)
ax.fill(theta, df2["data"], 'tomato', alpha=1, zorder=1.1)
ax.set_rlabel_position(216)
ax.set_xticks(theta)
ax.set_xticklabels(df2.index, fontsize=12)#, zorder=1)
legend = plt.legend(handles=[l1,l2], labels =['first','second'], loc='lower right')
plt.title("data [unit]", fontsize = 16, y = 1.2)
plt.savefig('atlas//trial2.png', bbox_inches='tight', dpi = 300)
plt.show()
Ich habe mehrere Kombinationen von 'zorder's ausprobiert, die _should_ Ihr Problem beeinflussen, vergeblich. Dies könnte ein ähnlicher Fehler sein (https://github.com/matplotlib/matplotlib/issues/5045). Polare Plots scheinen immer etwas problematischer zu sein als kartesische Plots. Kudos für die wohlgeformte Frage vervollständigen mit ausführbarem Beispiel! –