簡體   English   中英

我該如何要求matplotlib稍微移動重疊曲線,以免它們彼此隱藏?

[英]How can I ask matplotlib to slightly shift overlapping curves so they don't hide one another?

我正在使用matplotlib.pyplot在同一張圖上繪制幾條曲線。 有時它們具有相等的值,因此最后一個隱藏其他值,如下所示:

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([1,2,3,2.5], label="down")
plt.show()

隱藏曲線

我希望曲線稍微偏移,這樣它們就不會彼此隱藏,就像這樣:

所有曲線可見

有什么適當的方法可以執行此操作,而不更改我正在繪制的實際值?

更新:到目前為止(就我而言)最好的答案是TheImportanceOfBeingErnest 但是,如果要繪制n條曲線,而不僅僅是2條曲線,則必須計算每個曲線的累積偏移量。 但是考慮到該答案涉及的復雜計算,我想matplotlib無法自動執行此操作嗎?

PS:由於我的值都是0.5的倍數,(輕微)移動不會冒出混淆實際值的風險...

我想翻譯大小為matplotlib.transforms.offset_copy的藝術家的通常方法是使用matplotlib.transforms.offset_copy 由於默認的線寬為1.5點,因此可以將曲線平移大約那個數。

import matplotlib.pyplot as plt
import matplotlib.transforms as mtrans

fig, ax = plt.subplots()
ax.plot([1,2,3,4], label="up")

tr = mtrans.offset_copy(ax.transData, fig=fig, x=0.0, y=-1.5, units='points')
ax.plot([1,2,3,2.5], label="down", transform=tr)

plt.show()

在此處輸入圖片說明

注意,這在行擴展且沒有很多起伏的情況下效果很好。 在matplotlib中找到了更復雜的解決方案(但在很大程度上也更復雜) ,我如何繪制多色線,例如彩虹

您可以使用alpha屬性。

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([1,2,3,2.5], label="down", alpha=.3)
plt.legend()
plt.show()

更改[0,1]之間的比率,以獲得所需的最佳方式。 通過這種方式,您不必更改值。

為了提高可見性,您可以添加帶有“ alpha”的“ linewidth”屬性。 例如

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([1,2,3,2.5], label="down", linewidth=4, alpha=.5)
plt.legend()
plt.show()

根據需要更改值。

我將使用一種transform ,將第二個繪圖中的點稍微向下移動(也可以將其應用於第一個繪圖中以將點向上移動):

import matplotlib.pyplot as plt
from matplotlib import transforms

fig, ax = plt.subplots()

transform = transforms.Affine2D().translate(0, -0.03) + ax.transData

ax.plot([1, 2, 3, 4], label="up")
ax.plot([1, 2, 3, 2.5], label="down", transform=transform)

在此處輸入圖片說明

您可以簡單地縮放值

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([x-0.02 for x in [1,2,3,2.5]], label="down")
plt.legend()
plt.show()

產量

另一種選擇是使用虛線,使其具有重疊的較暗顏色。

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], color="red", label="up", lw=2)
plt.plot([1,2,3,2.5], color="black", linestyle=":", label="down", lw=2)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM