2016-11-19 17 views
1

我正在做一個散點圖,其中標記的大小是由一個列表給出,以便每個不同。有什麼方法可以添加一個說'這個大小的圓與此值相等'的鍵等等?就像地圖有如何顯示如何說1英寸等於1英里。 如果它非常重要,我在jupyter筆記本上這樣做,但我認爲這不重要。Pyplot傳說/關鍵,但規模,就像在地圖上

編輯:爲了澄清,每個數據點是許多其他數據的平均值,每個標記的大小對應於計算該平均數的數據點數。舉例來說,其中一個較小的點是50個數的中值,而其中一個較大的標記是數據點的中值爲150個數。所以它們對應的數字也不是物理尺寸,就像地圖一樣。

我已經有了像我希望它們那樣縮放的標記,我想要的是一個圖例/鍵,它指示了標記大小與它來自的值之間的關係。

+0

問題不是很清楚。如果標記的大小代表一些值,例如* 10像素製造商是1英寸,12像素製造商是2英寸*或者標記大小實際上是否與軸相關聯,例如1英寸標記的長度是1英寸?後者是在拓撲圖中遇到的問題,但是閱讀您的問題我不確定這是否意味着什麼。你能說出軸上的數量,以及如果你想在不同的尺度上繪圖(放大繪圖等)? – ImportanceOfBeingErnest

回答

0

plt.scatter中使用自變量s(以點數^ 2爲單位)。這是一個MWE。

import matplotlib.pyplot as plt 

value_and_markersize = {value:4**value for value in range(1, 10)} 

x = [2, 4, 5, 7] 
y = [0]*len(x) 
s = [value_and_markersize[value] for value in x] 

plt.scatter(x, y, s=s) 
plt.show() 

產生,

enter image description here

+0

這不是提問者的要求。相反,該問題要求提供與繪圖數據值相關的標記。但是,'markersize'是以點爲單位的,所以它不能給出與數據的關係。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest,thx爲您的更正。我剛剛更新了我的答案。 – SparkAndShine

+1

仍不確定這是否是要求的。標記大小仍然是像素,而不是數據單位。如果您縮放繪圖,縮放更改,但標記大小保持不變。 – ImportanceOfBeingErnest

1

據我瞭解,你希望你的標記是成比例的。這是plt.scatter()不可能的,因爲它的標記總是以像素爲單位。一個選項是使用補丁並將它們添加到PatchCollection中。

下面是一個例子

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as mpatches 
from matplotlib.collections import PatchCollection 

patches = [] 
coordinates = [(0,0), (2,0), (5,2), (1,7.6), (6,7), (2,4), (-1,5)] 
sizes = 0.9+np.random.rand(len(coordinates),2)*1.99 
print sizes 

for i, co in enumerate(coordinates): 
    rect = mpatches.Rectangle(co, sizes[i,0], sizes[i,1], ec="k") 
    patches.append(rect) 

fig, ax = plt.subplots(figsize=(6,5)) 
ax.set_aspect("equal") 
colors = np.linspace(0, 1, len(patches)) 
collection = PatchCollection(patches, cmap=plt.cm.hsv, alpha=0.3) 
collection.set_array(np.array(colors)) 
ax.add_collection(collection) 

norm_scale = mpatches.Rectangle((7,-1), 2,2, ec="k", facecolor="b") 
ax.add_patch(norm_scale) 
ax.set_xlim([-2,10]) 
ax.set_ylim([-2,10]) 
ax.set_ylabel("position [meters]") 
ax.set_xlabel("position [meters]") 
ax.set_title("Tents on a meddow") 
ax.text(8,0.9, "2 m", color="w", ha="center", va="top") 
ax.text(7.1,0, "2 m", color="w", ha="left", va="center", rotation=90) 
plt.show() 

給下面的情節,其中深藍色補丁是一種顯示一個標準尺寸的關鍵。

enter image description here