प्लॉटिंग> 100k डेटा पॉइंट्स?
स्वीकार किए जाते हैं जवाब , का उपयोग कर gaussian_kde () बहुत समय लगेगा। मेरी मशीन पर, 100k पंक्तियों में लगभग 11 मिनट लगे । यहाँ मैं दो वैकल्पिक विधियाँ ( mpl- तितर बितर-घनत्व और डेटाशेयर ) जोड़ूँगा और समान डेटासेट के साथ दिए गए उत्तरों की तुलना करूँगा ।
निम्नलिखित में, मैंने 100k पंक्तियों के एक परीक्षण डेटा सेट का उपयोग किया:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.normal(size=100000)
y = x * 3 + np.random.normal(size=100000)
आउटपुट और गणना समय की तुलना
नीचे विभिन्न तरीकों की तुलना है।
1: mpl-scatter-density
इंस्टालेशन
pip install mpl-scatter-density
उदाहरण कोड
import mpl_scatter_density
from matplotlib.colors import LinearSegmentedColormap
white_viridis = LinearSegmentedColormap.from_list('white_viridis', [
(0, '#ffffff'),
(1e-20, '#440053'),
(0.2, '#404388'),
(0.4, '#2a788e'),
(0.6, '#21a784'),
(0.8, '#78d151'),
(1, '#fde624'),
], N=256)
def using_mpl_scatter_density(fig, x, y):
ax = fig.add_subplot(1, 1, 1, projection='scatter_density')
density = ax.scatter_density(x, y, cmap=white_viridis)
fig.colorbar(density, label='Number of points per pixel')
fig = plt.figure()
using_mpl_scatter_density(fig, x, y)
plt.show()
इसे खींचने में 0.05 सेकंड का समय लगा:
और ज़ूम इन काफी अच्छा लगता है:
2: datashader
pip install "git+https://github.com/nvictus/datashader.git@mpl"
कोड ( यहाँ dsshow का स्रोत ):
from functools import partial
import datashader as ds
from datashader.mpl_ext import dsshow
import pandas as pd
dyn = partial(ds.tf.dynspread, max_px=40, threshold=0.5)
def using_datashader(ax, x, y):
df = pd.DataFrame(dict(x=x, y=y))
da1 = dsshow(df, ds.Point('x', 'y'), spread_fn=dyn, aspect='auto', ax=ax)
plt.colorbar(da1)
fig, ax = plt.subplots()
using_datashader(ax, x, y)
plt.show()
- इसे ड्रा करने में 0.83 सेकंड लगे:
और ज़ूम की गई छवि बहुत अच्छी लगती है!
3: scatter_with_gaussian_kde
def scatter_with_gaussian_kde(ax, x, y):
xy = np.vstack([x, y])
z = gaussian_kde(xy)(xy)
ax.scatter(x, y, c=z, s=100, edgecolor='')
- इसे बनाने में 11 मिनट लगे:
4: using_hist2d
import matplotlib.pyplot as plt
def using_hist2d(ax, x, y, bins=(50, 50)):
ax.hist2d(x, y, bins, cmap=plt.cm.jet)
- इस डिब्बे को खींचने में 0.021 सेकेंड लगते हैं = (50,50):
- इस डिब्बे को खींचने में 0.173 सेकेंड का समय लगा (= 1000,1000):
- विपक्ष: ज़ूम-इन डेटा mpl-बिखराव-घनत्व या डेटाशेयर के साथ उतना अच्छा नहीं दिखता है। इसके अलावा, आपको अपने आप डिब्बे की संख्या निर्धारित करनी होगी।
5: density_scatter
- कोड Guillaume द्वारा उत्तर में है ।
- इसे बीन = (50,50) के साथ खींचने में 0.073 सेकेंड का समय लगा:
- इसे बिन्स के साथ निकालने के लिए 0.368 s = (1000,1000) लिया गया: