plt.plot()使用Matplotlib 生成 Pdf時,似乎存在一些非常小的不準確之處。在下面我有一些簡單的例子,其中用 繪制的線與plt.plot()用 繪制的原始資料點不對齊plt.scatter()。差異很小,但在仔細查看 Pdf 時仍然可以在論文等中注意到。我正在使用 Matplotlib 3.6.1。
示例 1:
import pandas as pd
import matplotlib as mlp
mlp.use("Agg")
import matplotlib.pyplot as plt
df = pd.read_csv("my_data.csv")
fig = plt.figure(figsize=(1.5,1.5))
plt.plot(df['X'], df['Y'], color='b', linewidth=0.1)
plt.scatter(df['X'], df['Y'], color='k', s=0.05, linewidths=0)
fig.savefig("res.pdf")
fig.savefig("res.png", dpi=5000)
這是生成的 Pdf: Pdf plot 1
讓我們放大Pdf中的一些細節(黑點和藍線沒有對齊): Pdf plot 1 zoomed
Png中的同一段(一切都對齊): Png plot 1 zoomed
示例 2:
使用生成的資料可以達到相同的效果:
import numpy as np
import matplotlib as mlp
mlp.use("Agg")
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(1.0,1.5))
X = np.arange(0,12,0.01)
data = np.sin(X) np.random.normal(0, 0.005, (len(X),))
plt.plot(X, data, color='b', linewidth=0.06)
plt.scatter(X, data, color='k', s=0.05, linewidths=0)
fig.savefig("res.pdf")
這是生成的 Pdf:Pdf plot 2
讓我們放大Pdf中的一些細節(黑點和藍線沒有對齊):Pdf plot 2 zoomed
示例 3
提到的偏差很小,但在一些實際示例中實際上是可見的。在下圖中,我使用plt.fill_between()并繪制了相同的線plt.plot()。在這種情況下,線條的不準確性將在 Pdf 中直接可見,無需放大:
Pdf plot 3
問題:
對我來說,這種行為非常令人驚訝。PNG 圖(具有高 DPI)不顯示錯位。這里發生了什么?更改后端似乎并沒有改善結果。有沒有辦法讓這些情節更“準確”?
類似問題:鏈接
uj5u.com熱心網友回復:
事實證明,當圖形很小且資料非常密集時,Matplotlib 會簡化路徑,請參閱此處和此處的詳細資訊。
簡化通過迭代地將線段合并到單個向量中,直到下一條線段與向量的垂直距離(在顯示坐標空間中測量)大于
path.simplify_threshold parameter. Matplotlib 目前默認為 1/9 的保守簡化閾值。
要提高小地塊的繪圖精度,請將閾值更改為較小的值,例如
mlp.rcParams["path.simplify_threshold"] = 0.01
或者只是關閉路徑簡化:
mpl.rcParams['path.simplify'] = False
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/521461.html
