Pyplot:以自定义比例绘制图形(x 和 y)

我一直在 Jupyter Notebook 中使用以下代码绘制数据框:为了与仅在纸上以 0.005mm=1cm 比例提供的旧数据进行比较,我需要以相同比例导出和打印图形:0.005mm in the图(x 轴和 y 轴)在图中必须为 1cm。


有什么办法可以定义自定义比例吗?有关信息,x 范围和 y 范围不是固定的,它们会根据我加载到数据框中的数据而有所不同。


import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns            

import matplotlib.ticker as ticker



df = pd.DataFrame(np.array([[1.7, 0], [1.75, -0.012], [1.8, 0]]),

                   columns=['pos', 'val'])      

            

# Plot results

sns.set()

plt.figure(figsize=(20,30))


plt.plot(df['pos'], df['val'])


ax = plt.axes()

ax.set_aspect('equal')


plt.xlabel('Position [mm]')

plt.ylabel('Höhe [mm]')


ax.xaxis.set_major_locator(ticker.MultipleLocator(0.005))

ax.yaxis.set_major_locator(ticker.MultipleLocator(0.005))


plt.show()

http://img3.mukewang.com/641a6cfa0001b8a711970215.jpg

catspeake
浏览 183回答 2
2回答

开满天机

import matplotlib.pyplot as pltfrom mpl_toolkits.axes_grid1 import Divider, Sizefrom mpl_toolkits.axes_grid1.mpl_axes import Axescm = lambda d: d/2.54x, y = [1700.0, 1725.0, 1750.0], [0.0, -12.0, 0.0] # μmdx, dy = 50.0, 12.0# take margins into accountxmin, xmax = min(x)-dx*0.05, max(x)+dx*0.05ymin, ymax = min(y)-dy*0.05, max(y)+dy*0.05dx, dy = xmax-xmin, ymax-ymin# 5 μm data == 1 cm plotscale = 5/1xlen, ylen = dx/scale, dy/scale# Now we know the extents of our data and the axes dimension,# so we can set the Figure dimensions, taking borders into accountleft, right = 2, 1bot, top = 1.5, 1.5fig = plt.figure(    figsize=(cm(left+xlen+right), cm(bot+ylen+top)),    dpi=118)# change bg color to show so that one can measure the figure# and the axes when pasted into SO and do their math…fig.set_facecolor('xkcd:grey teal')##########  Below is stolen from Matplotlib Fixed Size Axes########## (please don't ask me…)# Origin and size of the x axis and y axish = [Size.Fixed(cm(left)), Size.Fixed(cm(xlen))]v = [Size.Fixed(cm(bot)), Size.Fixed(cm(ylen))]divider = Divider(fig, (0.0, 0.0, 1., 1.), h, v, aspect=False)# NB: Axes is from mpl_toolkits.axes_grid1.mpl_axesax = Axes(fig, divider.get_position())ax.set_axes_locator(divider.new_locator(nx=1, ny=1))fig.add_axes(ax)#########  Above is stolen from Matplotlib Fixed Size Axes Demo plt.plot(x,y)plt.grid()ax.set(xlim=(xmin, xmax), ylim=(ymin, ymax), yticks=range(-12,1,3),       xlabel='X/μm', ylabel='Y/μm',       title='X vs Y, 1 cm on plot equals 5 μm')fig.suptitle('Figure dimensions: w = %.2f cm, h = %.2f cm.'%(    left+xlen+right, bot+ylen+top))fig.savefig('Figure_1.png',            # https://stackoverflow.com/a/4805178/2749397, Joe Kington's            facecolor=fig.get_facecolor(), edgecolor='none')

繁星点点滴滴

1 英寸 = 2.54 厘米,所以 254/0.005 = 50800 dpiplt.figure(figsize=(20,30), dpi=50800)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python