ম্যাটপ্ল্লটিবের সাথে একটি 2 ডি হিটম্যাপ প্লট করা


139

ম্যাটপ্ল্লোব ব্যবহার করে, আমি একটি 2 ডি তাপের মানচিত্র তৈরি করতে চাই। আমার ডেটা হ'ল একটি এন-বাই-এন নম্পি অ্যারে, যার মান 0 এবং 1 এর মধ্যে রয়েছে with সুতরাং এই অ্যারের (i, j) উপাদানটির জন্য আমি আমার (i, j) স্থানাঙ্কে একটি বর্গক্ষেত্র প্লট করতে চাই তাপ মানচিত্র, যার রঙ অ্যারেতে উপাদানের মানের সাথে আনুপাতিক।

কিভাবে আমি এটি করতে পারব?


2
আপনি পোস্ট করার আগে matplotlibগ্যালারী তাকান কি ? কিছু ভাল উদাহরণ ব্যবহার করে রয়েছে imshow, pcolorএবং pcolormeshএটি আপনি যা চান তা করেন
tmdavison

উত্তর:


187

imshow()পরামিতি সঙ্গে ফাংশন interpolation='nearest'এবং cmap='hot'আপনি যা চান তা করতে হবে।

import matplotlib.pyplot as plt
import numpy as np

a = np.random.random((16, 16))
plt.imshow(a, cmap='hot', interpolation='nearest')
plt.show()

এখানে চিত্র বর্ণনা লিখুন


1
আমি মনে করি না যে নির্দিষ্ট করে ইন্টারপোলেশন প্রয়োজন।
মিগুয়েল.মার্টিন

2
@ মাইগুয়েল.মার্টিন পাইপলটের ডক অনুসারে: "যদি ইন্টারপোলেশন কোনও না হয় (এর ডিফল্ট মান), আরসি ইমেজ ইন্টিটারপোলেশন ডিফল্ট" " সুতরাং আমি এটি অন্তর্ভুক্ত করা প্রয়োজন বলে মনে করি।
পি। ক্যামিলারি

@ পি। ক্যামিলারি এক্স এবং ওয়াইয়ের অক্ষটি কীভাবে স্কেল করবেন? (শুধুমাত্র সংখ্যা পরিবর্তন করুন, জুম নেই)।
দোল

63

সিবোর্ন অনেকগুলি ম্যানুয়াল কাজের যত্ন নেয় এবং স্বয়ংক্রিয়ভাবে চার্টের পাশে একটি গ্রেডিয়েন্ট প্লট করে etc.

import numpy as np
import seaborn as sns
import matplotlib.pylab as plt

uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, linewidth=0.5)
plt.show()

এখানে চিত্র বর্ণনা লিখুন

বা, আপনি এমনকি বর্গ ম্যাট্রিক্সের উপরের / নীচের বাম / ডান ত্রিভুজগুলি প্লট করতে পারেন, উদাহরণস্বরূপ একটি পারস্পরিক সম্পর্ক ম্যাট্রিক্স যা বর্গক্ষেত্র এবং প্রতিসম হয়, সুতরাং সমস্ত মানকে প্লট করা যাইহোক অনর্থক হতে পারে be

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
    ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True,  cmap="YlGnBu")
    plt.show()

এখানে চিত্র বর্ণনা লিখুন


1
আমি প্লটের ধরণের খুব পছন্দ করি এবং অর্ধেক ম্যাট্রিক্স দরকারী। দুটি প্রশ্ন: 1) প্রথম চক্রান্তে ছোট স্কোয়ারগুলি সাদা লাইনের দ্বারা পৃথক করা হয়, সেগুলি সংযুক্ত হতে পারে? 2) সাদা রেখার প্রস্থে ভিন্নতা আছে বলে মনে হচ্ছে এটি কি কোনও প্রত্নতত্ত্ব?
পি। ক্যামিলারি

1
স্কোয়ার আউট করার জন্য আপনি অন্য প্লটের (উদাহরণস্বরূপ দ্বিতীয় প্লটে) প্রথম প্লটটিতে ব্যবহৃত 'লাইনউইথ' আর্গুমেন্টটি ব্যবহার করতে পারেন। স্ক্রিন শট ইস্যুগুলির কারণে লাইন প্রস্থগুলি কেবল প্রথম প্লটে পরিবর্তিত হয়, তারা বাস্তবে পরিবর্তিত হয় না, আপনি যে ধ্রুবক সেট করেছেন সেগুলিতে তাদের থাকা উচিত।
পাইআরস্কয়ার্ড

যদিও এটি সত্য - আমি মনে করি না যে সিবর্ন ব্যবহার করে একটি প্রতিক্রিয়া এমন একটি প্রশ্নের জন্য পূর্ণ বিবেচনা করা উচিত যা বিশেষত ম্যাটপ্ল্লোলিব বলে।
বাক্সেক্স

28

2 ডি numpyঅ্যারের জন্য, সহজভাবে ব্যবহার imshow()আপনাকে সহায়তা করতে পারে:

import matplotlib.pyplot as plt
import numpy as np


def heatmap2d(arr: np.ndarray):
    plt.imshow(arr, cmap='viridis')
    plt.colorbar()
    plt.show()


test_array = np.arange(100 * 100).reshape(100, 100)
heatmap2d(test_array)

উদাহরণ কোডের হিটম্যাপ

এই কোডটি অবিচ্ছিন্ন হিটম্যাপ তৈরি করে।

আপনি এখানcolormap থেকে অন্য অন্তর্নির্মিত চয়ন করতে পারেন ।


18

আমি ম্যাটপ্ল্লোলিবের প্যাকোলার / প্যাকোলরমেশ ফাংশনটি ব্যবহার করব কারণ এটি ডেটাগুলিকে অবিশ্বাস্য ব্যবধানের অনুমতি দেয়।

ম্যাটপ্ল্লোব থেকে নেওয়া উদাহরণ :

import matplotlib.pyplot as plt
import numpy as np

# generate 2 2d grids for the x & y bounds
y, x = np.meshgrid(np.linspace(-3, 3, 100), np.linspace(-3, 3, 100))

z = (1 - x / 2. + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
# x and y are bounds, so z should be the value *inside* those bounds.
# Therefore, remove the last value from the z array.
z = z[:-1, :-1]
z_min, z_max = -np.abs(z).max(), np.abs(z).max()

fig, ax = plt.subplots()

c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max)
ax.set_title('pcolormesh')
# set the limits of the plot to the limits of the data
ax.axis([x.min(), x.max(), y.min(), y.max()])
fig.colorbar(c, ax=ax)

plt.show()

pcolormesh প্লটের আউটপুট


12

সিএসভি থেকে এটি কীভাবে করবেন তা এখানে:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# Load data from CSV
dat = np.genfromtxt('dat.xyz', delimiter=' ',skip_header=0)
X_dat = dat[:,0]
Y_dat = dat[:,1]
Z_dat = dat[:,2]

# Convert from pandas dataframes to numpy arrays
X, Y, Z, = np.array([]), np.array([]), np.array([])
for i in range(len(X_dat)):
        X = np.append(X, X_dat[i])
        Y = np.append(Y, Y_dat[i])
        Z = np.append(Z, Z_dat[i])

# create x-y points to be used in heatmap
xi = np.linspace(X.min(), X.max(), 1000)
yi = np.linspace(Y.min(), Y.max(), 1000)

# Z is a matrix of x-y values
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')

# I control the range of my colorbar by removing data 
# outside of my range of interest
zmin = 3
zmax = 12
zi[(zi<zmin) | (zi>zmax)] = None

# Create the contour plot
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.rainbow,
                  vmax=zmax, vmin=zmin)
plt.colorbar()  
plt.show()

dat.xyzফর্ম যেখানে

x1 y1 z1
x2 y2 z2
...

1
মাত্র একটি সংক্ষিপ্ত শিরোনাম: আমাকে ঘনক থেকে নিকটতম বা লিনিয়ারে পদ্ধতিটি বদলাতে হয়েছিল কারণ ঘনকটির ফলে প্রচুর পরিমাণে এনএএন হয়েছিল যেহেতু আমি ০.১
মাইকেফার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.