শতাংশ হিসাবে y অক্ষকে ফর্ম্যাট করুন


114

আমার একটি বিদ্যমান প্লট রয়েছে যা এই জাতীয় পান্ডাস দিয়ে তৈরি হয়েছিল:

df['myvar'].plot(kind='bar')

Y অক্ষটি ভাসমান হিসাবে ফর্ম্যাট এবং আমি y অক্ষকে শতাংশে পরিবর্তন করতে চাই। আমি যে সমাধানগুলি পেয়েছি তার সবগুলি ax.xyz সিনট্যাক্স ব্যবহার করেছে এবং আমি কেবল উপরের লাইনের নীচে কোড রাখতে পারি যা প্লট তৈরি করে (আমি উপরের লাইনে ax = ax যোগ করতে পারছি না))

উপরের লাইনটি পরিবর্তন না করে আমি কীভাবে y অক্ষকে শতাংশ হিসাবে ফর্ম্যাট করতে পারি?

সমাধানটি আমি এখানে পেয়েছি তবে এর জন্য আমি প্লটটি নতুনভাবে সংজ্ঞায়িত করতে চাই :

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mtick

data = [8,12,15,17,18,18.5]
perc = np.linspace(0,100,len(data))

fig = plt.figure(1, (7,4))
ax = fig.add_subplot(1,1,1)

ax.plot(perc, data)

fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
xticks = mtick.FormatStrFormatter(fmt)
ax.xaxis.set_major_formatter(xticks)

plt.show()

উপরের সমাধানটির লিঙ্ক: পাইপলট: এক্স অক্ষের উপর শতাংশ ব্যবহার করে


আপনি দয়া করে ম্যাটপ্ল্লোলিব এ স্থানীয়ভাবে প্রয়োগ করা পদ্ধতির নিজের গৃহীত উত্তরটি পরিবর্তন করতে পারেন? stackoverflow.com/a/36319915/1840471
ম্যাক্স Ghenis

উত্তর:


128

এটি কয়েক মাস দেরি হয়ে গেছে, তবে আমি একটি নতুন ক্লাস যুক্ত করতে ম্যাটপ্ল্লিটিবের সাথে PR # 6251 জন তৈরি করেছি PercentFormatter। এই শ্রেণীর সাহায্যে আপনার অক্ষটি পুনরায় ফর্ম্যাট করার জন্য আপনার কেবল একটি লাইন প্রয়োজন (আপনি যদি আমদানি গণনা করেন তবে দুটি matplotlib.ticker):

import ...
import matplotlib.ticker as mtick

ax = df['myvar'].plot(kind='bar')
ax.yaxis.set_major_formatter(mtick.PercentFormatter())

PercentFormatter()তিন আর্গুমেন্ট গ্রহণ, , xmax, ।decimals অক্ষের সাথে 100% এর সাথে সাদৃশ্যযুক্ত মানটি সেট করতে দেয়। আপনার কাছে ০.০ থেকে ১.০ অবধি ডেটা থাকলে আপনি এটি 0% থেকে 100% পর্যন্ত প্রদর্শন করতে চান এটি দুর্দান্ত is শুধু করsymbolxmaxPercentFormatter(1.0)

অন্যান্য দুটি পরামিতি আপনাকে দশমিক বিন্দু এবং চিহ্নের পরে অঙ্কের সংখ্যা নির্ধারণ করতে দেয়। তারা যথাক্রমে ডিফল্ট Noneএবং '%'decimals=Noneআপনি কতটা অক্ষ প্রদর্শন করছেন তার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে দশমিক পয়েন্টের সংখ্যা সেট করবে।

হালনাগাদ

PercentFormatter ২.১.০ সংস্করণে ম্যাটপ্লটলিবের সাথে যথাযথভাবে প্রবর্তন করা হয়েছিল।


@ ম্যাটেন উলহাক দয়া করে আপনার সম্পাদনাগুলিতে উল্লেখযোগ্য কোড পরিবর্তনগুলি প্রবর্তন করবেন না। আপনি কোনও উত্তর ছাড়াই আমার উত্তরটিতে কোডটি প্রতিলিপি করেছেন। এটি একটি ভাল সম্পাদনা ছিল না।
ম্যাড পদার্থবিদ

আমার খারাপ, কিছু অদ্ভুত কারণে, আমি এটি পড়েছি from matplotlib.ticker import mtickএবং ধরে নিয়েছি mtick"মডিউল" সরানো হয়েছে।
মতিন উলহাক

125

পান্ডাস ডেটাফ্রেম প্লটটি আপনার axজন্য ফিরিয়ে দেবে এবং তারপরে আপনি যা চান অক্ষগুলি পরিচালনা করতে শুরু করতে পারেন।

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(100,5))

# you get ax from here
ax = df.plot()
type(ax)  # matplotlib.axes._subplots.AxesSubplot

# manipulate
vals = ax.get_yticks()
ax.set_yticklabels(['{:,.2%}'.format(x) for x in vals])

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


5
ইন্টারেক্টিভভাবে গ্রাফটি প্যান / জুম করার সাথে সাথে এর
অনাকাঙ্ক্ষিত

3
matplotlib.tickerফাংশন বিন্যাস ব্যবহার করার চেষ্টা করার চেয়ে মিলিয়ন গুণ সহজ !
জারাদ

তারপরে আপনি কীভাবে y অক্ষটি সীমাবদ্ধ করবেন (0,100%)? আমি ax.set_ylim (0,100) চেষ্টা করেছি কিন্তু এটি কাজ করে না বলে মনে হচ্ছে !!
mpour

@ প্রচুর পরিমাণে ইয়টিক্সের লেবেলগুলি পরিবর্তন করা হয়েছে, সুতরাং সীমাটি এখনও প্রাকৃতিক ইউনিটে রয়েছে। Ax.set_ylim (0, 1) সেট করা কৌতুকটি করবে।
জোয়ারান

79

Jianxun সমাধানটি আমার পক্ষে কাজটি করেছে তবে উইন্ডোর নীচে বাম দিকে y মান সূচকটি ভেঙেছে।

আমি FuncFormatterপরিবর্তে ব্যবহার করে শেষ হয়েছি (এবং এখানে পরামর্শ মতো অজানা ট্রেলিং শূন্যগুলিও ছিনিয়ে নিয়েছি ):

import pandas as pd
import numpy as np
from matplotlib.ticker import FuncFormatter

df = pd.DataFrame(np.random.randn(100,5))

ax = df.plot()
ax.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 

সাধারণত বললে আমি FuncFormatterলেবেল ফর্ম্যাটিংয়ের জন্য ব্যবহারের পরামর্শ দেব : এটি নির্ভরযোগ্য এবং বহুমুখী।

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


19
আপনি কোড এমনকি আরো প্রক্রিয়া সহজ করতে পারেন: ax.yaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format))। এ কেএ ল্যাম্বদার দরকার নেই, ফর্ম্যাটটি কাজটি করতে দিন।
ড্যানিয়েল হিমেলস্টেইন

@ ড্যানিয়েলহিমেলস্টেইন আপনি কি এই বিষয়টি একটু ব্যাখ্যা করতে পারেন? বিশেষত {} এর ভিতরে} পাইথন ফর্ম্যাটটি ব্যবহার করে আমার 0.06 কীভাবে 6% এ পরিণত হবে তা নিশ্চিত নয়। এছাড়াও দুর্দান্ত সমাধান। .Set_ticklabels ব্যবহারের চেয়ে অনেক বেশি নির্ভরযোগ্যতার সাথে কাজ করছে বলে মনে হচ্ছে
ডিসিপ্যাসেস

3
@ ডিপিসিটি '{0:.0%}'.formatএকটি ফর্ম্যাটিং ফাংশন তৈরি করে0কোলন আগে ফরম্যাটার বলে প্রথম আর্গুমেন্ট ফাংশন প্রেরণ সঙ্গে কোঁকড়া-বন্ধনী এবং এটির সামগ্রীগুলি প্রতিস্থাপন। কোলনের পরে অংশটি .0%, মানটি কীভাবে রেন্ডার করতে হয় তা বিন্যাসকে বলে tells .00 দশমিক স্থান এবং নির্দিষ্ট করে %একটি শতাংশ হিসাবে রেন্ডারিং নির্দিষ্ট করে।
ড্যানিয়েল হিমেলস্টেইন

31

যারা দ্রুত ওয়ান-লাইনার সন্ধান করছেন তাদের জন্য:

plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()]) 

অথবা আপনি যদি অক্ষের পাঠ্য বিন্যাস হিসাবে লেটেক্স ব্যবহার করছেন তবে আপনাকে একটি ব্যাকস্ল্যাশ '\' যুক্ত করতে হবে

plt.gca().set_yticklabels(['{:.0f}\%'.format(x*100) for x in plt.gca().get_yticks()]) 

আমার জন্য, ড্যানিয়েল হিমেলস্টেইনের উত্তর কাজ করেছে যেখানে এই উত্তরটি স্কেল পরিবর্তন করেছে
আর কক্স

2

আমি একটি বিকল্প পদ্ধতি ব্যবহার করে প্রস্তাব করছি seaborn

কাজের কোড:

import pandas as pd
import seaborn as sns
data=np.random.rand(10,2)*100
df = pd.DataFrame(data, columns=['A', 'B'])
ax= sns.lineplot(data=df, markers= True)
ax.set(xlabel='xlabel', ylabel='ylabel', title='title')
#changing ylables ticks
y_value=['{:,.2f}'.format(x) + '%' for x in ax.get_yticks()]
ax.set_yticklabels(y_value)

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


0

আমি গেমটি করতে দেরি করেছি তবে আমি এটি বুঝতে পেরেছি: axপ্রতিস্থাপন করা যেতে পারেplt.gca() যারা অক্ষ এবং কেবল সাবপ্লট ব্যবহার করছেন না তাদের জন্য ।

@ ম্যাড পদার্থবিজ্ঞানের উত্তর প্রতিধ্বনি করা হচ্ছে, প্যাকেজটি ব্যবহার করে PercentFormatterএটি হবে:

import matplotlib.ticker as mtick

plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter(1))
#if you already have ticks in the 0 to 1 range. Otherwise see their answer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.