ฉันสร้างพล็อตนี้โดยใช้ Matlab
การใช้ matplotlib x-axies จะวาดตัวเลขขนาดใหญ่เช่น 100000, 200000, 300000 ฉันต้องการมีบางอย่างเช่น 1, 2, 3 และ 10 ^ 5 เพื่อระบุว่าเป็น 100000, 200000, 300000
มีวิธีง่ายๆในการสร้างมาตราส่วนดังกล่าวใน matplotlib หรือไม่?
ฉันสร้างพล็อตนี้โดยใช้ Matlab
การใช้ matplotlib x-axies จะวาดตัวเลขขนาดใหญ่เช่น 100000, 200000, 300000 ฉันต้องการมีบางอย่างเช่น 1, 2, 3 และ 10 ^ 5 เพื่อระบุว่าเป็น 100000, 200000, 300000
มีวิธีง่ายๆในการสร้างมาตราส่วนดังกล่าวใน matplotlib หรือไม่?
คำตอบ:
ลองใช้matplotlib.pyplot.ticklabel_format
:
import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
สิ่งนี้ใช้สัญกรณ์ทางวิทยาศาสตร์ (กล่าวคือa x 10^b
) กับติ๊กมาร์กแกน x ของคุณ
ticklabel_format
นอกจากนี้ยังเป็นวิธีการสำหรับวัตถุแกนคุณสามารถลองบางอย่างเช่นax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
[0.1, 0.2, ...]
และฉันต้องการ[1, 2, ...]
ด้วยเลขชี้กำลังที่ปรับแล้ว คุณสามารถหาวิธีแก้ปัญหานั้นได้หรือไม่?
นี่ไม่ใช่คำตอบสำหรับคำถามเดิมของคุณมากนักสำหรับคำถามที่คุณมีในเนื้อหาของคำถามของคุณ
เกริ่นไว้เล็กน้อยเพื่อให้การตั้งชื่อของฉันดูไม่แปลก:
import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )
ดังที่ได้กล่าวไปแล้วคุณสามารถใช้ ticklabel_format เพื่อระบุว่า matplotlib ควรใช้สัญกรณ์ทางวิทยาศาสตร์สำหรับค่าขนาดใหญ่หรือเล็ก:
ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')
คุณสามารถส่งผลต่อวิธีที่แสดงโดยใช้แฟล็กใน rcParams (จาก matplotlib import rcParams) หรือโดยการตั้งค่าโดยตรง ฉันไม่พบวิธีเปลี่ยนสัญกรณ์ทางวิทยาศาสตร์ระหว่าง '1e' และ 'x10 ^' ที่สวยงามกว่า:
ax.xaxis.major.formatter._useMathText = True
สิ่งนี้จะทำให้คุณได้ Matlab-esc มากขึ้นและมีลักษณะที่ดีกว่าอย่างแน่นอน ฉันคิดว่าสิ่งต่อไปนี้ควรทำเช่นเดียวกัน:
rc('text', usetex=True)
ตัวจัดรูปแบบสเกลาร์รองรับการรวบรวมเลขชี้กำลัง เอกสารมีดังนี้:
class matplotlib.ticker.ScalarFormatter (useOffset = True, useMathText = False, useLocale = None) ฐาน: matplotlib.ticker.Formatter
ตำแหน่งติ๊กเป็นตัวเลขเก่าธรรมดา หาก useOffset == True และช่วงข้อมูลมีขนาดเล็กกว่าค่าเฉลี่ยของข้อมูลมากจะมีการกำหนดค่าชดเชยเพื่อให้ป้ายกำกับมีความหมาย สัญกรณ์วิทยาศาสตร์ใช้สำหรับข้อมูล <10 ^ -n หรือ data> = 10 ^ m โดยที่ n และ m เป็นขีด จำกัด กำลังที่กำหนดโดยใช้ set_powerlimits ((n, m)) ค่าดีฟอลต์สำหรับสิ่งเหล่านี้ถูกควบคุมโดยพารามิเตอร์ axes.formatter.limits rc
เทคนิคของคุณคือ:
from matplotlib.ticker import ScalarFormatter
xfmt = ScalarFormatter()
xfmt.set_powerlimits((-3,3)) # Or whatever your limits are . . .
{{ Make your plot }}
gca().xaxis.set_major_formatter(xfmt)
เพื่อให้ได้ตัวแทนที่แสดงในรูปแบบx10^5
, อินสแตนซ์ ScalarFormatter useMathText=True
ด้วย
คุณยังสามารถใช้:
xfmt.set_useOffset(10000)
เพื่อให้ได้ผลลัพธ์ดังนี้:
useMathText=True
x10^4
ฉันพบวิธีง่ายๆ
pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4))