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.