Matplotlib dağılım grafiği; üçüncü değişkenin fonksiyonu olarak renk


152

Noktaları üçüncü bir değişkene göre gölgeli nerede bir scatterplot (matplotlib kullanarak) yapmak istiyorum. Bununla çok yakınım var:

plt.scatter(w, M, c=p, marker='s')

burada w ve M veri noktaları ve p ise gölgelendirmek istediğim değişkendir.
Ancak bunu renk yerine gri tonlamalı yapmak istiyorum. Biri yardım edebilir mi?

Yanıtlar:


156

Renkleri manuel olarak ayarlamanıza gerek yoktur. Bunun yerine gri tonlamalı bir renk haritası belirtin ...

import numpy as np
import matplotlib.pyplot as plt

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()

plt.show()

resim açıklamasını buraya girin

Ya da, daha geniş bir renk haritası aralığını tercih ederseniz, cmapkwarg'u da belirtebilirsiniz scatter. Bunlardan herhangi birinin tersine çevrilmiş sürümünü kullanmak için bunlardan herhangi birinin " _r" sürümünü belirtmeniz yeterlidir. Örneğin gray_ryerine gray. Önceden hazırlanmış birkaç farklı gri tonlama renk haritaları (örneğin vardır gray, gist_yarg, binary, vs).

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()

1
Teşekkürler! Toplam ağırlıkların belirli bir miktarını içeren bu noktaların etrafına kontur çizmek için yine de var mı?
— Thomas Collett

6
mpl.cmolarak doğrudan kullanılabilir plt.cm.
— heltonbiker

@Thomas Collet: Eğer kontur çizmek istiyorsanız, noktaları bir 2B matrisine veriyi enterpole etmeniz, sonra bunu kullanarak plt.contour()veya plt.contourf()- işaretini çizmeniz gerekir, ancak bu farklı bir soru
— Zak

Etiketi göstergeye nasıl ekleyebilirsiniz? Bu durumda sürekli sayılarla, renk çubuğunu kullanacağınızdan şüpheleniyorum. Ayrık değerler söz konusu olduğunda ne olacak? örneğin, üç kategorim için açıklamalara 3 etiket ekleyebilir miyim?
— Nate

26

Matplotlib'de gri renkler 0-1 arasında sayısal bir değer dizesi olarak verilebilir.
Örneğinc = '0.1'

Daha sonra üçüncü değişkeninizi bu aralık içindeki bir değerde dönüştürebilir ve puanlarınızı renklendirmek için kullanabilirsiniz.
Aşağıdaki örnekte noktanın y konumunu, rengi belirleyen değer olarak kullandım:

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]

color = [str(item/255.) for item in y]

plt.scatter(x, y, s=500, c=color)

plt.show()

resim açıklamasını buraya girin


3
Kayıt için, cdördüncü sütunda alfa değerleri olan bağımsız değişken olarak (n, 4) şekilli bir dizi sağlarsanız, ALPHA'yı bir renk haritası olarak uygulayabilirsiniz . Üçüncü değişken Z ise shape=(n,1), o zaman colors = numpy.hstack((numpy.zeros_like(z), numpy.zeros_like(z), numpy.ones_like(z), z/z.max()))çok güzel bir etki verir (elbette ince ayar yapılabilir).
— heltonbiker

Bir hata alıyorum: 'rgba dizisinin uzunluğu 3 veya 4 olmalıdır'
— MattCochrane

1
@MattClimbs Örnekte olduğu gibi plt.scatter yerine plt.plot çağırdığından şüpheleniyorum.
— smashbro

bu grafiğe nasıl bir renk çubuğu eklersiniz?
— FaCoffee

2
@FaCoffee plt.colorbar()bunu yapacak
— Mathew Savage

10

Bazen x-değeri durumuna göre rengi kesin olarak çizmeniz gerekebilir . Örneğin, 3 tür değişken ve bazı veri noktaları içeren bir veri çerçeveniz olabilir. Ve aşağıdakileri yapmak istiyorsunuz,

  • KIRMIZI Fiziksel değişken 'A'ya karşılık gelen noktaları çizin.
  • MAVİ'de Fiziksel değişken 'B'ye karşılık gelen noktaları çizin.
  • YEŞİL olarak fiziksel değişken 'C'ye karşılık gelen noktaları çizin.

Bu durumda, x değerlerini karşılık gelen renk adlarıyla bir liste olarak eşleştirmek için kısa işleve yazmanız ve ardından bu listeyi plt.scatterkomuta iletmeniz gerekebilir .

x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]

# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
    cols=[]
    for l in lst:
        if l=='A':
            cols.append('red')
        elif l=='B':
            cols.append('blue')
        else:
            cols.append('green')
    return cols
# Create the colors list using the function above
cols=pltcolor(x)

plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()

X değişkeninin bir fonksiyonu olarak renk dağılım grafiği


bu çizim için bir renk çubuğu nasıl oluşturulur?
— Maryam Rahmani Moghaddam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.