سؤال

أنا أرسم رسمًا بيانيًا باستخدام

plt.imshow(hist2d, norm = LogNorm(), cmap = gray)

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

Histogram

ولكن أود أن تكون البقع البيضاء سوداء.

شكرًا لك!

هل كانت مفيدة؟

المحلول

إليك طريقة بديلة لا تتطلب منك العبث ببياناتك عن طريق تعيين قيمة rgb لوحدات البكسل السيئة.

import copy
data = np.arange(25).reshape((5,5))
my_cmap = copy.copy(matplotlib.cm.get_cmap('gray')) # copy the default cmap
my_cmap.set_bad((0,0,0))
plt.imshow(data, 
           norm=matplotlib.colors.LogNorm(), 
           interpolation='nearest', 
           cmap=my_cmap)

المشكلة هي أن الصناديق مع 0 لا يمكن تسجيل الدخول بشكل صحيح، لذلك يتم وضع علامة عليها على أنها "سيئة"، والتي يتم تعيينها بشكل مختلف.السلوك الافتراضي هو عدم رسم أي شيء على تلك البكسلات.يمكنك أيضًا تحديد اللون الذي تريد رسم وحدات البكسل الموجودة فوق أو تحت حدود خريطة الألوان (اللون الافتراضي هو رسمها باللون الأعلى/الأدنى).

نصائح أخرى

إذا كنت راضيًا عن مقياس اللون كما هو، وتريد ببساطة أن تكون القيم 0 سوداء، فسأقوم ببساطة بتغيير مصفوفة الإدخال بحيث يتم استبدال الأصفار بالقيمة الأصغر التالية:

import matplotlib.pyplot as plt
import matplotlib.cm, matplotlib.colors
import numpy

hist2d = numpy.arange(9).reshape(3,3)

plt.imshow(numpy.maximum(hist2d, sorted(hist2d.flat)[1]), 
           interpolation='nearest', 
           norm = matplotlib.colors.LogNorm(), 
           cmap = matplotlib.cm.gray)

ينتج عنه

0- loading=mimimum picture">

هل تم إنشاء هذا باستخدام وظيفة matplotlib hist2d؟

كل ما عليك فعله هو المرور عبر المصفوفة وتعيين قيمة أرضية اعتباطية، ثم التأكد من رسمها بحدود ثابتة

for f in hist2d:
   f += 1e-3

ثم عند إظهار الشكل، ستكون كل المسافات البيضاء الآن عند قيمة الأرضية، وستظهر على المخطط اللوغاريتمي الطبيعي.ومع ذلك، إذا كنت تسمح لـ hist2d باختيار المقياس تلقائيًا، فسوف يحتاج إلى استخدام قيمة الحد الأدنى 1e-3 كحد أدنى.لتجنب ذلك، تحتاج إلى تعيين قيم vmin وvmax في hist2d

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top