অভিধান ব্যবহার করে ম্যাটপ্ল্লোব ব্যবহার করে একটি বার প্লট করুন


96

matplotlibডিক থেকে সরাসরি ডেটা ব্যবহার করে কোনও বার প্লট প্লট করার কোনও উপায় আছে কি ?

আমার আদেশটি এরকম দেখাচ্ছে:

D = {u'Label1':26, u'Label2': 17, u'Label3':30}

আমি আশা করেছিলাম

fig = plt.figure(figsize=(5.5,3),dpi=300)
ax = fig.add_subplot(111)
bar = ax.bar(D,range(1,len(D)+1,1),0.5)

কাজ, কিন্তু এটি না।

ত্রুটি এখানে:

>>> ax.bar(D,range(1,len(D)+1,1),0.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 4904, in bar
    self.add_patch(r)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1570, in add_patch
    self._update_patch_limits(p)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1588, in _update_patch_limits
    xys = patch.get_patch_transform().transform(vertices)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 580, in get_patch_transform
    self._update_patch_transform()
  File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 576, in _update_patch_transform
    bbox = transforms.Bbox.from_bounds(x, y, width, height)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/transforms.py", line 786, in from_bounds
    return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found

আপনি কি বিশেষভাবে ভাগ করতে পারেন যা কাজ করে না? আপনি কি একটি ব্যতিক্রম পেতে? কি ব্যতিক্রম? যথাসম্ভব তথ্য শেয়ার করুন।
— ইনবার রোজ

@ ইন্নবরস, দুঃখিত, আমি প্রশ্নটি ত্রুটিটি দিয়ে দেখিয়েছি ... স্ট্রিং বা বাফার সম্পর্কিত কিছু ... আমি এই ত্রুটি বার্তাটি বুঝতে পারি না।
— otmezger

4
আপনি কী অর্জন করতে চান তা পরিষ্কার নয়, তবে ax.bar(D,range(1,len(D)+1,1),0.5)প্রথম যুক্তিতে আপনার ক্ষেত্রে সংখ্যার একটি তালিকা হওয়া উচিত D.values()।
— অ্যাড্রিয়ানপ

4
এটির জন্য কমপক্ষে আমার জ্ঞানের পক্ষে একটি ওয়ানলাইনার সম্ভব নয়।
— অ্যাড্রিয়ানপ

4
আপনি এটির জন্য গিথুব সাইটে একটি বৈশিষ্ট্য অনুরোধ জমা দিতে চাইতে পারেন, কারণ এটি দরকারী বলে মনে হচ্ছে না।
— টাকসওয়েল

উত্তর:


162

আপনি প্রথমে বার চার্ট প্লট করে এবং তারপরে উপযুক্ত টিক্স সেট করে দুটি লাইনে এটি করতে পারেন:

import matplotlib.pyplot as plt

D = {u'Label1':26, u'Label2': 17, u'Label3':30}

plt.bar(range(len(D)), list(D.values()), align='center')
plt.xticks(range(len(D)), list(D.keys()))
# # for python 2.x:
# plt.bar(range(len(D)), D.values(), align='center')  # python 2.x
# plt.xticks(range(len(D)), D.keys())  # in python 2.x

plt.show()

নোট করুন যে পেনাল্টিমেট লাইনে plt.xticks(range(len(D)), list(D.keys()))পাইথন 3 পড়তে হবে কারণ D.keys()একটি জেনারেটর দেয় যা ম্যাটপ্ল্লিটিব সরাসরি ব্যবহার করতে পারে না।


4
আপনি অবশ্যই কোনও ফাংশনে এই দুটি লাইন
— গুটিয়ে

4
আপনি চিত্রে এবং অক্ষ বস্তু ব্যবহার করেন, তাহলে এটাax.set_xticklabels
— মার্ক

4
ধন্যবাদ! তবে আমার প্লট টেক্সট নিয়ে কিছু এস্টেটিক সমস্যা রয়েছে, দয়া করে কীভাবে আমাদের অনুভূমিকভাবে উলম্বভাবে সরানো যায় তা আমাদের বলতে পারেন।
— মোল্ডোভেন

4
ডিক বাছাই না করা হলে কী-মানযুক্ত জোড়গুলি সারিবদ্ধ থাকে?
— এসএসএম

4
পাইথন ডিক্টস বাছাই করা যায় না। ফলস্বরূপ, আদেশ সর্বদা স্বেচ্ছাসেবী হয়। যাইহোক, কী এবং মানগুলি সর্বদা উপরের কোডের সাথে একত্রিত হয়।
— ডেভিড জুইকার

41

এখানে বেশিরভাগ উত্তরগুলির থেকে এটি সামান্য সরল:

import matplotlib.pyplot as plt

D = {u'Label1':26, u'Label2': 17, u'Label3':30}
plt.bar(*zip(*D.items()))
plt.show()

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


35

ভবিষ্যতের রেফারেন্সের জন্য, উপরের কোডটি পাইথন 3 এর সাথে কাজ করে না পাইথন 3 এর D.keys()জন্য একটি তালিকায় রূপান্তর করা দরকার।

import matplotlib.pyplot as plt

D = {u'Label1':26, u'Label2': 17, u'Label3':30}

plt.bar(range(len(D)), D.values(), align='center')
plt.xticks(range(len(D)), list(D.keys()))

plt.show()

8

matplotlib.pyplot.bar(range, height, tick_label)গ্রাফের সাথে সম্পর্কিত বারের অবস্থানের জন্য ব্যাপ্তিটি স্কেলারের মান সরবরাহ করে সেখানে এটি ব্যবহার করে সেরা উপায় । tick_labelহিসাবে একই কাজ করে xticks()। এটি একটি পূর্ণসংখ্যার সাথেও প্রতিস্থাপন করতে পারে এবং একাধিক ব্যবহার করতে পারে plt.bar(integer, height, tick_label)। বিস্তারিত তথ্যের জন্য দয়া করে ডকুমেন্টেশন দেখুন ।

import matplotlib.pyplot as plt

data = {'apple': 67, 'mango': 60, 'lichi': 58}
names = list(data.keys())
values = list(data.values())

#tick_label does the some work as plt.xticks()
plt.bar(range(len(data)),values,tick_label=names)
plt.savefig('bar.png')
plt.show()

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

অতিরিক্তভাবে একই প্লট ব্যবহার না করে উত্পন্ন করা যেতে পারে range()। তবে যে সমস্যার মুখোমুখি হয়েছিল তা হ'ল tick_labelকেবলমাত্র শেষ plt.bar()কলের জন্য কাজ করেছে । সুতরাং xticks()লেবেলিংয়ের জন্য ব্যবহৃত হয়েছিল:

data = {'apple': 67, 'mango': 60, 'lichi': 58}
names = list(data.keys())
values = list(data.values())
plt.bar(0,values[0],tick_label=names[0])
plt.bar(1,values[1],tick_label=names[1])
plt.bar(2,values[2],tick_label=names[2])
plt.xticks(range(0,3),names)
plt.savefig('fruit.png')
plt.show()

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


4

আমি প্রায়শই ডানাকে একটি পান্ডাস ডেটা ফ্রেমে লোড করি তারপরে ডেটাফ্রেমের প্লট ফাংশনটি ব্যবহার করি।
এখানে ওয়ান-লাইনার রয়েছে:

pandas.DataFrame(D, index=['quantity']).plot(kind='bar')

ফলস্বরূপ প্লট


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