如何在matplotlib图上更改所有元素(刻度,标签,标题)的字体大小?
我知道如何更改刻度标签尺寸,这是通过以下方式完成的:
import matplotlib
matplotlib.rc('xtick', labelsize=20)
matplotlib.rc('ytick', labelsize=20)
Run Code Online (Sandbox Code Playgroud)
但是如何改变其余部分呢?
我正在Matplotlib中创建一个像这样的人物:
from matplotlib import pyplot as plt
fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')
Run Code Online (Sandbox Code Playgroud)
我想指定图标题和轴标签的字体大小.我需要三个不同的字体大小,所以设置全局字体大小(mpl.rcParams['font.size']=x)不是我想要的.如何单独设置图标题和轴标签的字体大小?
我的目标是在一个框架中添加一个垂直滚动条,框架中有几个标签.一旦框架内的标签超过框架的高度,滚动条就会自动启用.经过搜索,我找到了这个有用的帖子.基于这一职位,我明白,为了达到我想要的,(纠正我,如果我错了,我是初学者),我要创建一个Frame第一,然后创建一个Canvas该框架内,坚持滚动条到帧好.之后,创建另一个框架并将其作为窗口对象放在画布中.所以,我终于想到了这个:
from Tkinter import *
def data():
for i in range(50):
Label(frame,text=i).grid(row=i,column=0)
Label(frame,text="my text"+str(i)).grid(row=i,column=1)
Label(frame,text="..........").grid(row=i,column=2)
def myfunction(event):
canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200)
root=Tk()
sizex = 800
sizey = 600
posx = 100
posy = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1)
myframe.place(x=10,y=10)
canvas=Canvas(myframe)
frame=Frame(canvas)
myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.pack(side="right",fill="y")
canvas.pack(side="left")
canvas.create_window((0,0),window=frame,anchor='nw')
frame.bind("<Configure>",myfunction)
data()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
anchor='nw'在画布上创建窗口时使用有什么特别之处?因为我是初学者,请保持简单的答案.
比方说,matplotlib xlabels中有3行子图,其中一行可以与下一行的标题重叠.一个人必须摆弄pl.subplots_adjust(hspace),这很烦人.
是否有一个配方hspace可以防止重叠并适用于任何nrow?
""" matplotlib xlabels overlap titles ? """
import sys
import numpy as np
import pylab as pl
nrow = 3
hspace = .4 # of plot height, titles and xlabels both fall within this ??
exec "\n".join( sys.argv[1:] ) # nrow= ...
y = np.arange(10)
pl.subplots_adjust( hspace=hspace )
for jrow in range( 1, nrow+1 ):
pl.subplot( nrow, 1, jrow )
pl.plot( y**jrow )
pl.title( 5 * ("title %d " % jrow) ) …Run Code Online (Sandbox Code Playgroud) 之前已经提出过类似的问题,但我的所有搜索结果都没有解决我的问题.请参考以下示例代码:
from matplotlib.pyplot import *
fig = figure(1, figsize=(3.25, 3))
plot([0,1,5,2,9])
title('title')
xlabel('xAxis')
ylabel('yAxis')
fig.savefig('test.png',dpi=600)
Run Code Online (Sandbox Code Playgroud)
得到的数字是2040x1890像素,或3.4"x3.15",并且x标签被切断.在图像编辑器中查看PNG文件,轴和刻度标签似乎符合所需的大小.我已经尝试从输出大小和请求的大小中取出差异并将其反馈到(3.25 - (3.4-3.25)= 3.10,但是matplotlib似乎添加了一个任意缓冲区并且它仍然没有达到所需的大小.如何制作出所需尺寸的整体数字?
我一直在试图传递一些脚本(使用Tkinter的)的GUI的背后,到目前为止迄今该所打开的任何数据在Tkinter的画布显示(使用matplotlib绘制吧)做到了.
我唯一的问题是matplotlib中的标准缩放/滚动(使用鼠标左键"移动"绘图和鼠标右键"缩放")在画布中无法访问,基本上是功能matplotlib绘图窗口中的'4尖十字'.
我认为这需要创建我自己的处理程序,但我认为必须有一种方法来使用matplotlib的默认处理程序?我也看过这个问题中提到的'滚动'画布选项,但那些似乎只是改变了绘图区域的大小而不是放大/缩小数据,我也不想再添加任何按钮来操纵情节区.
我目前最简单的代码:
#! /usr/bin/env python
from Tkinter import *
import matplotlib.pyplot as plt
import matplotlib.backends.backend_tkagg as tkagg
import tkFileDialog
class App():
def __init__(self,master):
# VARIABLES
self.inputFile = ""
self.fig = plt.Figure()
self.canvas = tkagg.FigureCanvasTkAgg(self.fig, master = master)
self.canvas.get_tk_widget().pack()
self.canvas.draw()
# FRAME
frame = Frame(master)
master.title("MassyTools 0.1.1 (Alpha)")
# VARIABLE ENTRIES
# BUTTONS
# MENU
menu = Menu(root)
root.config(menu = menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Open Input File", command = self.openFile)
calibmenu = Menu(menu)
menu.add_cascade(label="Calibrate",menu=calibmenu)
calibmenu.add_command(label="Open …Run Code Online (Sandbox Code Playgroud)