Ich versuche, Zählungen in Rasterplots zu zeichnen, aber ich kann nicht herausfinden, wie ich damit umgehe. Ich möchte:
Punktraster im Abstand von 5 haben
Habe nur alle 20 Major Tick Labels
Ich möchte, dass die Zecken außerhalb der Handlung sind.
Haben "zählt" in diesen Gittern
Ich habe nach möglichen Duplikaten wie hier und hier gesucht, aber ich konnte es nicht herausfinden.
Das ist mein Code.
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
for key, value in sorted(data.items()):
x = value[0][2]
y = value[0][3]
count = value[0][4]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.annotate(count, xy = (x, y), size = 5)
# Overwrites and I only get the last data point
plt.close()
# Without this, I get "fail to allocate bitmap" error
plt.suptitle('Number of counts', fontsize = 12)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.axes().set_aspect('equal')
plt.axis([0, 1000, 0, 1000])
# This gives an interval of 200
majorLocator = MultipleLocator(20)
majorFormatter = FormatStrFormatter('%d')
minorLocator = MultipleLocator(5)
# I want minor grid to be 5 and major grid to be 20
plt.grid()
filename = 'C:\Users\Owl\Desktop\Plot.png'
plt.savefig(filename, dpi = 150)
plt.close()
Das bekomme ich.
Ich habe auch ein Problem mit dem Überschreiben der Datenpunkte, mit denen ich ebenfalls Probleme habe. Könnte mir jemand bei diesem Problem helfen?
Es gibt verschiedene Probleme in Ihrem Code.
Zuerst die Großen:
Sie erstellen in jeder Iteration Ihrer Schleife eine neue Figur und eine neue Achse → Setzen Sie fig = plt.figure
Und ax = fig.add_subplot(1,1,1)
außerhalb der Schleife.
Verwenden Sie nicht die Locators. Rufen Sie die Funktionen ax.set_xticks()
und ax.grid()
mit den richtigen Schlüsselwörtern auf.
Mit plt.axes()
legen Sie wieder eine neue Achse an. Verwenden Sie ax.set_aspect('equal')
.
Die kleinen Dinge: Sie sollten die MATLAB-ähnliche Syntax wie plt.axis()
nicht mit der objektiven Syntax mischen. Benutze ax.set_xlim(a,b)
und ax.set_ylim(a,b)
Dies sollte ein funktionierendes Minimalbeispiel sein:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# Major ticks every 20, minor ticks every 5
major_ticks = np.arange(0, 101, 20)
minor_ticks = np.arange(0, 101, 5)
ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor=True)
ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor=True)
# And a corresponding grid
ax.grid(which='both')
# Or if you want different settings for the grids:
ax.grid(which='minor', alpha=0.2)
ax.grid(which='major', alpha=0.5)
plt.show()
Die Ausgabe lautet wie folgt:
Eine subtile Alternative zu MaxNoes Antwort , bei der Sie nicht explizit die Häkchen setzen, sondern die Trittfrequenz.
import matplotlib.pyplot as plt
from matplotlib.ticker import (AutoMinorLocator, MultipleLocator)
fig, ax = plt.subplots(figsize=(10, 8))
# Set axis ranges; by default this will put major ticks every 25.
ax.set_xlim(0, 200)
ax.set_ylim(0, 200)
# Change major ticks to show every 20.
ax.xaxis.set_major_locator(MultipleLocator(20))
ax.yaxis.set_major_locator(MultipleLocator(20))
# Change minor ticks to show every 5. (20/4 = 5)
ax.xaxis.set_minor_locator(AutoMinorLocator(4))
ax.yaxis.set_minor_locator(AutoMinorLocator(4))
# Turn grid on for both major and minor ticks and style minor slightly
# differently.
ax.grid(which='major', color='#CCCCCC', linestyle='--')
ax.grid(which='minor', color='#CCCCCC', linestyle=':')