matplotlib - حجم المخطط علامة مبعثر pyplot




marker scatter (4)

في وثيقة pyplot لمؤامرة مبعثر:

matplotlib.pyplot.scatter (x، y، s = 20، c = 'b'، marker = 'o'، cmap = None، norm = None، vmin = None، vmax = None، alpha = None، linewidths = None، faceted = True، verts = None، hold = None، ** kwargs)

حجم العلامة

s: size في النقاط ^ 2. هو عددي أو مصفوفة بنفس طول x و y.

ما هو نوع الوحدة من points^2 ؟ ماذا تعني؟ هل s=100 يعني 10 pixel x 10 pixel ؟

في الأساس أحاول إنشاء قطع مبعثرة بأحجام مختلفة للعلامات ، وأرغب في معرفة ماذا يعني الرقم.


إذا كان حجم الدوائر يقابل مربع المعلمة في s=parameter ، فقم بتعيين جذر مربع لكل عنصر يتم إلحاقه بصفيف الحجم الخاص بك ، مثل هذا: s=[1, 1.414, 1.73, 2.0, 2.24] مثل أنه عندما يأخذ هذه القيم ويعيدها ، فإن زيادة حجمها النسبي ستكون الجذر التربيعي للتقدم التربيعي ، الذي يعيد التسلسل الخطي.

إذا كان لي أن مربع كل واحد كما يحصل الإخراج إلى المؤامرة: output=[1, 2, 3, 4, 5] . جرب تفسير القائمة: s=[numpy.sqrt(i) for i in s]


إنها منطقة العلامة. أعني أن لديك s1 = 1000 ثم s2 = 4000 ، العلاقة بين نصف قطر كل دائرة هي: r_s2 = 2 * r_s1 . انظر المؤامرة التالية:

plt.scatter(2, 1, s=4000, c='r')
plt.scatter(2, 1, s=1000 ,c='b')
plt.scatter(2, 1, s=10, c='g')

كان لدي نفس الشكوك عندما رأيت المنشور ، لذلك فعلت هذا المثال ثم استخدمت مسطرة على الشاشة لقياس نصف القطر.


قد تكون هذه طريقة مربكة إلى حد ما لتحديد الحجم ولكنك تحدد منطقة العلامة بشكل أساسي. وهذا يعني ، لمضاعفة عرض (أو ارتفاع) العلامة التي تحتاج إلى زيادة s بعامل 4. [لأن A = W H => (2W) (2H) = 4A]

هناك سبب ، ومع ذلك ، يتم تعريف حجم علامات بهذه الطريقة. نظرًا لقياس المساحة كمربع عرض ، يبدو أن مضاعفة العرض في الواقع تزيد من الحجم بأكثر من عامل 2 (في الحقيقة ، إنها تزيده بعامل 4). لرؤية هذا النظر في المثالين التاليين والمخرجات التي تنتجها.

# doubling the width of markers
x = [0,2,4,6,8,10]
y = [0]*len(x)
s = [20*4**n for n in range(len(x))]
plt.scatter(x,y,s=s)
plt.show()

يعطي

لاحظ كيف يزداد الحجم بسرعة كبيرة. إذا بدلا من ذلك لدينا

# doubling the area of markers
x = [0,2,4,6,8,10]
y = [0]*len(x)
s = [20*2**n for n in range(len(x))]
plt.scatter(x,y,s=s)
plt.show()

يعطي

الآن يزداد الحجم الظاهر للعلامات بشكل خطي تقريبًا بطريقة بديهية.

أما بالنسبة للمعنى الدقيق لماهية "النقطة" ، فهو تعسفي إلى حد ما لأغراض التخطيط ، يمكنك فقط قياس جميع الأحجام الخاصة بك بشكل ثابت حتى تبدو معقولة.

أتمنى أن يساعدك هذا!

تحرير: (رداً على التعليق منEmma)

من المحتمل أن يكون الأمر محيّرًا من جهتي. طرح السؤال حول مضاعفة عرض دائرة حتى في الصورة الأولى لكل دائرة (ونحن نتحرك من اليسار إلى اليمين) العرض هو ضعف واحد سابق لذلك بالنسبة للمنطقة فإن هذا هو الأس مع القاعدة 4. وبالمثل فإن المثال الثاني كل دائرة لديها مساحة مضاعفة في المنطقة الأخيرة والتي تعطي قيمة أسية مع الأساس 2.

ومع ذلك ، فإن المثال الثاني (حيث نحن منطقة التدرج) هو أن المنطقة المضاعفة تجعل الدائرة أكبر مرتين للعين. وهكذا إذا أردنا أن تظهر دائرة عامل n أكبر ، فإننا سنزيد المساحة بعامل n وليس نصف القطر ، لذلك فإن المقياس الظاهر يتغير بشكل خطي مع المنطقة.


يمكنك استخدام العلامة لتحديد حجم الدائرة في طريقة الرسم

import numpy as np
import matplotlib.pyplot as plt

x1 = np.random.randn(20)
x2 = np.random.randn(20)
plt.figure(1)
# you can specify the marker size two ways directly:
plt.plot(x1, 'bo', markersize=20)  # blue circle with size 10 
plt.plot(x2, 'ro', ms=10,)  # ms is just an alias for markersize
plt.show()

من here





scatter