Skalierungsproblem MatplotlibPython

Python-Programme
Guest
 Skalierungsproblem Matplotlib

Post by Guest »

Ich bin gerade dabei, mit matplotlib in Python eine Vorlage zu erstellen, die zum Schneiden von Material zum Nähen eines Kleidungsstücks (eines Musters) verwendet werden kann.
Ich bin eigentlich sehr zufrieden damit wie die Handlung ausgegangen ist. Alle Funktionen, die ich brauchte, waren in matplotlib zu finden.
Das Hauptproblem (und ziemlich großes) ist die Skalierung. Wenn ich das als PDF speichere, misst jedes Quadrat etwa 0,75 cm, obwohl es 1 cm sein sollte. Dies spiegelt sich auch in der Handlung wider, z.B. Der Abstand zwischen p0 und p1 sollte 41,5 cm betragen und die tatsächliche Länge im exportierten Dokument beträgt 31,8 cm.
Ich habe einen kurzen Screenshot eines Abschnitts des Diagramms angehängt.
Unten sehen Sie, wie ich die Handlung als PDF speichere.
Für jeden Rat wäre ich sehr dankbar.

Code: Select all

# Marking lines
fig, ax = plt.subplots()

# Setting plot limits and equal aspect ratio
ax.set_xlim(-1, 20)
ax.set_ylim(-2, 85)
ax.set_aspect('equal')

# Add grid lines for 1 cm squares
# To convert from data units to cm units, you need to know the figure size and dpi
fig_width_cm = fig.get_size_inches()[0] * 2.54  # convert from inches to cm
fig_height_cm = fig.get_size_inches()[1] * 2.54

# Assuming a dpi of 300
dpi = 300
x_ticks = np.arange(-1, 20, 1)
y_ticks = np.arange(-2, 85, 1)
ax.set_xticks(x_ticks)
ax.set_yticks(y_ticks)

# Showing grid and inverting y-axis
ax.grid(True)
plt.gca().invert_yaxis()

# Define DPI (dots per inch)
dpi = 300

# Convert axis limits to inches
x_range_in_inches = (21 / 2.54)  # Conversion from cm to inches
y_range_in_inches = (87 / 2.54)  # Conversion from cm to inches

# Set the figure size based on the axis limits
fig.set_size_inches(x_range_in_inches, y_range_in_inches, forward=True)

# Save the figure with only the visible area
file_path = 'E:/#DOCUMENTS/#Code/high_resolution_plot.pdf'
fig.savefig(file_path, dpi=dpi, bbox_inches='tight', pad_inches=0.1, transparent=True)

# Display the plot
plt.show()

plt.close(fig)
Ich verstehe, dass es damit zu tun hat, dass Matplotlib Zoll als Standardmaßeinheit verwendet – und vielleicht etwas mit DPI beim Exportieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post