ใน Python ด้วย Matplotlib พล็อตกระจายที่มีวงกลมว่างเปล่าจะถูกพล็อตได้อย่างไร เป้าหมายคือการวาดวงกลมที่ว่างเปล่ารอบ ๆดิสก์สีบางอันที่ได้วางแผนไว้แล้วscatter()
เพื่อที่จะไฮไลต์โดยไม่ต้องวาดวงกลมสีใหม่
ฉันพยายามที่facecolors=None
จะไม่มีประโยชน์
ใน Python ด้วย Matplotlib พล็อตกระจายที่มีวงกลมว่างเปล่าจะถูกพล็อตได้อย่างไร เป้าหมายคือการวาดวงกลมที่ว่างเปล่ารอบ ๆดิสก์สีบางอันที่ได้วางแผนไว้แล้วscatter()
เพื่อที่จะไฮไลต์โดยไม่ต้องวาดวงกลมสีใหม่
ฉันพยายามที่facecolors=None
จะไม่มีประโยชน์
คำตอบ:
จากเอกสารสำหรับการกระจาย:
Optional kwargs control the Collection properties; in particular:
edgecolors:
The string ‘none’ to plot faces with no outlines
facecolors:
The string ‘none’ to plot unfilled outlines
ลองทำสิ่งต่อไปนี้:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=80, facecolors='none', edgecolors='r')
plt.show()
หมายเหตุ:สำหรับประเภทอื่น ๆ ของแปลงดูโพสต์นี้เกี่ยวกับการใช้และmarkeredgecolor
markerfacecolor
facecolors=None
ไม่ทำงานซึ่งทำให้ฉันสะดุด
markerfacecolor='none'
นี้เป็นวิธีที่มันเป็นตอนนี้
markerfacecolor='none'
ลองเพิ่มmarkeredgewidth=1.0
%matplotlib inline
และimport matplotlib.pyplot as plt
แล้วการตั้งค่าทะเลที่จะเริ่มต้นการวางแผนโดยimport seaborn as sns; sns.set()
จะใช้งานได้ไหม
plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')
หรือใช้พล็อต ()
plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')
plot
แทนscatter
นี่เป็นอีกวิธีหนึ่ง: เป็นการเพิ่มวงกลมให้กับแกนปัจจุบันพล็อตหรือรูปภาพหรืออะไรก็ตาม:
from matplotlib.patches import Circle # $matplotlib/patches.py
def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ):
""" add a circle to ax= or current axes
"""
# from .../pylab_examples/ellipse_demo.py
e = Circle( xy=xy, radius=radius )
if ax is None:
ax = pl.gca() # ax = subplot( 1,1,1 )
ax.add_artist(e)
e.set_clip_box(ax.bbox)
e.set_edgecolor( color )
e.set_facecolor( facecolor ) # "none" not None
e.set_alpha( alpha )
(วงกลมในภาพถูกบีบให้เป็นวงรีเนื่องจากimshow aspect="auto"
)
ใน matplotlib 2.0 มีพารามิเตอร์ที่เรียกว่าfillstyle
ซึ่งช่วยให้การควบคุมที่ดีขึ้นเกี่ยวกับวิธีการเติมเครื่องหมาย ในกรณีของฉันฉันใช้กับ errorbars แต่มันใช้งานได้กับเครื่องหมายโดยทั่วไป
http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html
fillstyle
ยอมรับค่าต่อไปนี้: ['เต็ม' | 'ซ้าย' | 'ขวา' | 'ด้านล่าง' | 'ด้านบน' | 'ไม่มี']
สิ่งสำคัญสองประการที่ควรคำนึงถึงเมื่อใช้งานfillstyle
คือ
1) หาก mfc ถูกตั้งค่าเป็นค่าใด ๆ มันจะให้ความสำคัญดังนั้นถ้าคุณตั้งค่ารูปแบบเป็น 'ไม่มี' มันจะไม่มีผล ดังนั้นหลีกเลี่ยงการใช้ mfc ร่วมกับ fillstyle
2) คุณอาจต้องการควบคุมความกว้างของขอบเครื่องหมาย (โดยใช้markeredgewidth
หรือmew
) เพราะถ้าเครื่องหมายมีขนาดค่อนข้างเล็กและความกว้างของขอบมีความหนาเครื่องหมายจะมีลักษณะเหมือนเติมแม้ว่าจะไม่ได้
ต่อไปนี้เป็นตัวอย่างการใช้ errorbars:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue', mec='blue')
อ้างอิงจากตัวอย่างของ Gary Kerr และตามที่เสนอไว้ที่นี่หนึ่งอาจสร้างวงกลมว่างเปล่าที่เกี่ยวข้องกับค่าที่ระบุด้วยรหัสต่อไปนี้:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.markers import MarkerStyle
x = np.random.randn(60)
y = np.random.randn(60)
z = np.random.randn(60)
g=plt.scatter(x, y, s=80, c=z)
g.set_facecolor('none')
plt.colorbar()
plt.show()
.scatter()
ไม่ได้ สำหรับบริบทฉันยังใช้ colormap ( c=z, cmap='jet'
)
ดังนั้นฉันคิดว่าคุณต้องการเน้นบางจุดที่ตรงกับเกณฑ์ที่กำหนด คุณสามารถใช้คำสั่งของ Prelude เพื่อทำพล็อตกระจายที่สองของคะแนนไฮไลต์ที่มีวงกลมว่างเปล่าและการโทรครั้งแรกเพื่อพล็อตจุดทั้งหมด ตรวจสอบให้แน่ใจว่าพารามิเตอร์มีขนาดเล็กเพียงพอสำหรับวงกลมว่างที่ใหญ่กว่าเพื่อใส่วงกลมที่เล็กกว่าไว้
ตัวเลือกอื่นคือไม่ใช้การกระจายและวาดการปะแยกแต่ละรายการโดยใช้คำสั่ง circle / ellipse เหล่านี้อยู่ใน matplotlib.patchesนี่คือตัวอย่างรหัสบางส่วนเกี่ยวกับวิธีการวาดรูปสี่เหลี่ยมผืนผ้าวงกลม ฯลฯ