প্রতিটি ডেটা পয়েন্টে ম্যাটপ্ল্লোলিব স্ক্যাটার প্লট বিভিন্ন পাঠ্য সহ


252

আমি একটি বিক্ষিপ্ত প্লট তৈরি করার চেষ্টা করছি এবং তালিকা থেকে বিভিন্ন সংখ্যার সাথে ডেটা পয়েন্টগুলি টীকায় আছি। সুতরাং, উদাহরণস্বরূপ, আমি yবনাম প্লট করতে চাই xএবং এর সাথে সম্পর্কিত সংখ্যার সাথে টীকা লিখতে চাই n

y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')

কোন ধারনা?


আপনি এমপিএলডি 3 লাইব্রেরি ব্যবহার করে হোভারে টুলটিপ লেবেল সহ স্ক্রেটার প্লট পেতে পারেন। mpld3.github.io/example/scatter_tooltip.html
ক্লড সম্মত

উত্তর:


466

অ্যারে বা তালিকাগুলি গ্রহণকারী কোনও প্লট পদ্ধতি সম্পর্কে আমি অবগত নই annotate()তবে মানগুলির মধ্যে পুনরাবৃত্তি করার সময় আপনি ব্যবহার করতে পারেন n

y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.subplots()
ax.scatter(z, y)

for i, txt in enumerate(n):
    ax.annotate(txt, (z[i], y[i]))

এর জন্য অনেকগুলি ফর্ম্যাটিং বিকল্প রয়েছে annotate(), ম্যাটপ্ল্লোব ওয়েবসাইটটি দেখুন:

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


1
regplotখুব বেশি বাধা ছাড়াই সিবর্নস এর শীর্ষে খুব ভাল কাজ করে।
আইজোসেফ

@ রুটার আমি একটি পান্ডাস ডেটাফ্রেম ব্যবহার করি এবং আমি একরকম পাই KeyError- তাই আমি অনুমান করি যে কোনও dict()জিনিস প্রত্যাশিত? সেখানে ব্যবহার করে তথ্য লেবেল অন্য কোন উপায় আছে কি enumerate, annotateএবং পান্ডাস ডেটা ফ্রেম?
রাচেল

@ রেচেল, আপনি ব্যবহার করতে পারেন for row in df.iterrows():এবং এর সাথে মানগুলি অ্যাক্সেস করতে পারেন row['text'], row['x-coord']ইত্যাদি you
রাটার ক্যাসিস

@ রুটারক্যাসিজ ধন্যবাদ, রাটার! আমি এখানে একটি প্রশ্ন পোস্ট করেছি stackoverflow.com/questions/41481153/… আমি আশঙ্কা করি যে এটি সম্ভবত এই প্রশ্নের অনুরূপ হতে পারে। তবে আমি এটি কোনওভাবেই কাজ করতে পারি না। আপনার সাহায্যের জন্য ধন্যবাদ!
রাহেল

1
@ অ্যাভিয়েটার, দুর্ভাগ্যক্রমে অন্তর্নির্মিত নয়। কিন্তু উদাহরণস্বরূপ এই networkx এর ব্যবহার লেআউট ইঞ্জিন দেখতে stackoverflow.com/a/34697108/1755432
Rutger Kassies

32

সংস্করণটির ম্যাটপ্লটলিব ২.০ এর আগের সংস্করণে, ax.scatterচিহ্নিতকারীগুলি ছাড়া পাঠ্যের প্লট করা প্রয়োজন হয় না। সংস্করণ ২.০ এ আপনাকে ax.scatterপাঠ্যের জন্য যথাযথ পরিসর এবং মার্কার সেট করতে হবে ।

y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.subplots()

for i, txt in enumerate(n):
    ax.annotate(txt, (z[i], y[i]))

এবং এই লিঙ্কে আপনি 3 ডি-তে একটি উদাহরণ খুঁজে পেতে পারেন।


এটা সত্যিই দারুন! এই সমাধান ভাগ করে নেওয়ার জন্য ধন্যবাদ। আপনি কি চিত্রের আকার নির্ধারণ করতে সঠিক কোডটি কী ভাগ করতে পারেন? যেমন বাস্তবায়ন যেমন plt.figure(figsize=(20,10))প্রত্যাশার মতো কাজ করে না, এতে এই কোডটি চাওয়া আসলে চিত্রের আকার পরিবর্তন করে না। আপনার সহায়তার প্রত্যাশায় ধন্যবাদ!
লেভাইন

ডুমুর, কুড়ালি = plt.subplots (ডুমুর আকার = (20,10))
রাফেলওয়ালে

21

যদি কেউ উপরের সমাধানগুলিকে একটি .sbplot () এর পরিবর্তে একটি .স্ক্যাটারে () প্রয়োগ করতে চাইছে,

আমি নিম্নলিখিত কোডটি চালানোর চেষ্টা করেছি

y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.scatter(z, y)

for i, txt in enumerate(n):
    ax.annotate(txt, (z[i], y[i]))

তবে "অ-পুনরাবৃত্তিযোগ্য পন্থা সংকলন অবজেক্টটি আনপ্যাক করতে পারে না" উল্লেখ করে ত্রুটিগুলি ছুঁড়েছে, বিশেষভাবে কোডলাইন ডুমুর, ax = plt.scatter (z, y) এর দিকে নির্দেশ করে ত্রুটি রয়েছে

নিম্নলিখিত কোডগুলি ব্যবহার করে আমি শেষ পর্যন্ত ত্রুটিটি সমাধান করেছি

plt.scatter(z, y)

for i, txt in enumerate(n):
    plt.annotate(txt, (z[i], y[i]))

.Scatter () এবং .subplot () এর মধ্যে আমার আরও ভাল জানা উচিত ছিল between


11

আপনি ব্যবহার করতে পারেন pyplot.text( এখানে দেখুন )।

def plot_embeddings(M_reduced, word2Ind, words):
""" Plot in a scatterplot the embeddings of the words specified in the list "words".
    Include a label next to each point.
"""
for word in words:
    x, y = M_reduced[word2Ind[word]]
    plt.scatter(x, y, marker='x', color='red')
    plt.text(x+.03, y+.03, word, fontsize=9)
plt.show()

M_reduced_plot_test = np.array([[1, 1], [-1, -1], [1, -1], [-1, 1], [0, 0]])
word2Ind_plot_test = {'test1': 0, 'test2': 1, 'test3': 2, 'test4': 3, 'test5': 4}
words = ['test1', 'test2', 'test3', 'test4', 'test5']
plot_embeddings(M_reduced_plot_test, word2Ind_plot_test, words)

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


7

পাইথন ৩.6++:

coordinates = [('a',1,2), ('b',3,4), ('c',5,6)]
for x in coordinates: plt.annotate(x[0], (x[1], x[2]))

2

তালিকা বোধগম্য এবং ন্যূনতম ব্যবহার করে ওয়ান লাইনার হিসাবে:

[ax.annotate(x[0], (x[1], x[2])) for x in np.array([n,z,y]).T]

সেটআপ হ'ল রাটারের উত্তরের উত্তর।


1

আমি যুক্ত করতে চাই যে আপনি এমনকি লেবেলগুলি টীকায়িত করতে তীর / পাঠ্য বাক্সগুলি ব্যবহার করতে পারেন। আমি যা বলতে চাইছি তা এখানে:

import random
import matplotlib.pyplot as plt


y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]

fig, ax = plt.subplots()
ax.scatter(z, y)

ax.annotate(n[0], (z[0], y[0]), xytext=(z[0]+0.05, y[0]+0.3), 
    arrowprops=dict(facecolor='red', shrink=0.05))

ax.annotate(n[1], (z[1], y[1]), xytext=(z[1]-0.05, y[1]-0.3), 
    arrowprops = dict(  arrowstyle="->",
                        connectionstyle="angle3,angleA=0,angleB=-90"))

ax.annotate(n[2], (z[2], y[2]), xytext=(z[2]-0.05, y[2]-0.3), 
    arrowprops = dict(arrowstyle="wedge,tail_width=0.5", alpha=0.1))

ax.annotate(n[3], (z[3], y[3]), xytext=(z[3]+0.05, y[3]-0.2), 
    arrowprops = dict(arrowstyle="fancy"))

ax.annotate(n[4], (z[4], y[4]), xytext=(z[4]-0.1, y[4]-0.2),
    bbox=dict(boxstyle="round", alpha=0.1), 
    arrowprops = dict(arrowstyle="simple"))

plt.show()

যা নিম্নলিখিত গ্রাফ তৈরি করবে: এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.