[英]How can I shift overlapping data points slightly along the x-axis in 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.