matplotlibห้องสมุดที่มีความสามารถมาก แต่ขาด interactiveness โดยเฉพาะอย่างยิ่งภายใน Jupyter โน๊ตบุ๊ค ฉันต้องการที่ดีออฟไลน์เครื่องมือวางแผนเหมือนplot.ly
matplotlibห้องสมุดที่มีความสามารถมาก แต่ขาด interactiveness โดยเฉพาะอย่างยิ่งภายใน Jupyter โน๊ตบุ๊ค ฉันต้องการที่ดีออฟไลน์เครื่องมือวางแผนเหมือนplot.ly
คำตอบ:
มีห้องสมุดที่ยอดเยี่ยมที่เรียกว่าMPLD3ที่สร้างแปลง D3 แบบโต้ตอบ
รหัสนี้สร้างพล็อตเชิงโต้ตอบ HTML ของชุดข้อมูลไอริสยอดนิยมที่เข้ากันได้กับ Jupyter Notebook เมื่อเลือกแปรงทาสีมันจะช่วยให้คุณสามารถเลือกชุดย่อยของข้อมูลที่จะเน้นในแปลงทั้งหมด เมื่อเลือกลูกศรไขว้จะช่วยให้คุณสามารถวางเมาส์เหนือจุดข้อมูลและดูข้อมูลเกี่ยวกับข้อมูลต้นฉบับ ฟังก์ชั่นนี้มีประโยชน์มากเมื่อทำการวิเคราะห์ข้อมูลเชิงสำรวจ
นำเข้า matplotlib.pyplot เป็น plt
นำเข้าจำนวนมากเป็น np
นำเข้านุ่นเป็น pd
นำเข้าทะเลจาก sb
นำเข้า mpld3
จากปลั๊กอินนำเข้า mpld3
% matplotlib แบบอินไลน์
iris = sb.load_dataset ('iris')
จาก sklearn.preprocessing นำเข้า StandardScaler
X = pd.get_dummies (ไอริส)
X_scal = StandardScaler (). fit_transform (X)
สลัว = 3
จาก sklearn.decomposition นำเข้า PCA
pca = PCA (n_components = dim)
Y_sklearn = pca.fit_transform (X_scal)
# กำหนด CSS บางอย่างเพื่อควบคุมป้ายกำกับที่กำหนดเองของเรา
css = "" "
โต๊ะ
{
การยุบชายแดน: การล่มสลาย;
}
TH
{
สี: #ffffff;
สีพื้นหลัง: # 000000;
}
td
{
สีพื้นหลัง: #cccccc;
}
ตาราง, th, td
{
ครอบครัวแบบอักษร: Arial, Helvetica, sans-serif;
เส้นขอบ: สีดำทึบ 1px;
จัดเรียงข้อความ: ขวา;
}
"""
มะเดื่อ, ขวาน = plt.subplots (สลัวสลัวมะเดื่อ = (6,6))
fig.subplots_adjust (hspace = .4, wspace = .4)
tooltip = [None] * dim
N = 200
ดัชนี = np.random.choice (ช่วง (Y_sklearn.shape [0]), ขนาด = N)
สำหรับ m อยู่ในช่วง (สลัว):
สำหรับ n อยู่ในช่วง (m + 1):
ax [m, n] .grid (จริง, alpha = 0.3)
scatter = ax [m, n]. scatter (Y_sklearn [index, m], Y_sklearn [index, n], alpha = .05)
ป้ายกำกับ = []
สำหรับฉันในดัชนี:
label = X.ix [[i],:]. T.astype (int)
label.columns = ['Row {0}'. format (X.index [i])]
labels.append (STR (label.to_html ()))
ax [m, n] .set_xlabel ('Component' + str (m))
ax [m, n] .set_ylabel ('Component' + str (n))
#ax [m, n] .set_title ('คำแนะนำเครื่องมือ HTML', ขนาด = 20)
tooltip [m] = plugins.PointHTMLTooltip (กระจาย, ป้ายกำกับ,
voffset = 20, hoffset = 20, css = css)
ปลั๊กอินเชื่อมต่อ (รูปที่คำแนะนำเครื่องมือ [m])
plugins.connect (รูปที่, plugins.LinkedBrush (กระจาย))
test = mpld3.fig_to_html (fig = fig)
ด้วย open ("Output.html", "w") เป็น text_file:
text_file.write (ทดสอบ)
เห็นมันในการดำเนินการในบล็อกของฉัน
อัปเดต [9 กรกฎาคม 2559]: ฉันเพิ่งพบว่า Plot.ly มีโหมดออฟไลน์และตอนนี้เป็นโอเพ่นซอร์ส มันมีระฆังและนกหวีดจำนวนมากบรรจุไว้ล่วงหน้า แต่ MPLD3 อาจยังคงเหมาะสมในบางกรณี
ฉันต้องการที่จะแสดงความคิดเห็นแทนคำตอบเนื่องจากฉันไม่ได้ตั้งใจที่จะเสียบ / โฆษณา แต่ตอนนี้ฉันกำลังทำวิทยานิพนธ์ของฉันซึ่งอาจเป็นที่สนใจของคุณตามที่คุณต้องการ ในความเป็นจริงมันเป็นเครื่องมือสร้างภาพข้อมูลการจัดกลุ่ม แต่ถ้าคุณใช้ k-mean ด้วย k = 1 คุณมีพล็อตเชิงโต้ตอบที่คุณสามารถค้นหาคำเลือกพื้นที่และดูเนื้อหาของแต่ละโหนดและสิ่งอื่น ๆ ลองดูและดูว่าเหมาะกับคุณหรือไม่!
ทางเลือกที่ดีมากพล็อตคือ ...
ในกรณีของฉันฉันพยายามพล็อตเรื่องที่คล้ายกันโดยใช้ทักษะซึ่งทักษะคือ word2vec ที่มีการฝัง 300 มิติ นำมาสู่พื้นที่เวกเตอร์ 3 มิติและใช้ Scatter3D อย่างมีแผนฉันก็สามารถพล็อต 3D scatterplot เหมือนกันได้
Et Viola !! มีกราฟ 3 มิติที่ยอดเยี่ยมพร้อมฟังก์ชันการวางเมาส์และขยาย และส่วนที่ดีที่สุดคือมันสามารถส่งออกเป็นไฟล์ html ทำให้เป็นแบบพลักแอนด์เพลย์ที่เหมาะสำหรับพีซีอื่น ๆ เพียงลากและวางในเบราว์เซอร์ (รวมอยู่ในรหัสด้านล่าง)
BEE จะง่ายกว่านี้อีกแล้ว
from plotly.offline import plot
from plotly.graph_objs import *
import numpy as np
# x = np.random.randn(2000)
# y = np.random.randn(2000)
# Instead of simply calling plot(...), store your plot as a variable and pass it to displayHTML().
# Make sure to specify output_type='div' as a keyword argument.
# (Note that if you call displayHTML() multiple times in the same cell, only the last will take effect.)
p = plot(
[
Scatter3d(x=skills_df[0], y=skills_df[1], z=skills_df[2], text= skills_df['designation'], mode='markers', marker=Marker(color=skills_df['cluster_number'], size=3, opacity=0.5, colorscale='Viridis'))
],
output_type='div'
# filename='/dbfs/FileStore/tables/lnkdn_jobroles_viridis.html' turn it on to save the file
)
ipywidgets(ตัวอย่างที่github.com/ipython/ipywidgets/blob/master/docs/source/examples / … ) หรือbokeh( bokeh.pydata.org/en/latest )