Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以对数比例固定x轴和y轴格式_Python_Python 2.7_Matplotlib_Plot - Fatal编程技术网

Python 以对数比例固定x轴和y轴格式

Python 以对数比例固定x轴和y轴格式,python,python-2.7,matplotlib,plot,Python,Python 2.7,Matplotlib,Plot,这是我用来生成这个数字的代码 import numpy as np import matplotlib import matplotlib.pyplot as plt # generate data x = np.linspace(0.01, 9.9, 15) y = np.linspace(0.07, 0.7, 15) matplotlib.rcParams['font.size'] = 20 # legend matplotlib.rcParams['legend.frameon']

这是我用来生成这个数字的代码

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

# generate data
x = np.linspace(0.01, 9.9, 15)
y = np.linspace(0.07, 0.7, 15)


matplotlib.rcParams['font.size'] = 20

# legend
matplotlib.rcParams['legend.frameon'] = False
matplotlib.rcParams['legend.fontsize'] = 'medium'

# ticks
matplotlib.rcParams['xtick.major.size'] = 10.0
matplotlib.rcParams['xtick.minor.size'] = 5.0
matplotlib.rcParams['xtick.major.width'] = 2.0
matplotlib.rcParams['xtick.minor.width'] = 2.0
matplotlib.rcParams['xtick.major.pad'] = 8.0

matplotlib.rcParams['ytick.major.size'] = 10.0
matplotlib.rcParams['ytick.minor.size'] = 5.0
matplotlib.rcParams['ytick.major.width'] = 2.0
matplotlib.rcParams['ytick.minor.width'] = 2.0
matplotlib.rcParams['ytick.major.pad'] = 8.0


fig = plt.figure(figsize=(10,6))
ax = fig.add_subplot(111)

plt.scatter(x, y, marker='o', color='k')

plt.xscale('log')
plt.xlim(xmin=0.005, xmax=10)
plt.yscale('log')
plt.ylim(ymin=0.07, ymax=0.7)

plt.xlabel('x')
plt.ylabel('y')

# x axis format
ax.xaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter("%.2f"))

# y axis format
ax.yaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter("%.1f"))
ax.yaxis.set_minor_formatter(matplotlib.ticker.FormatStrFormatter("%.1f"))

# borders 
plt.axhline(0.07, color='k', lw=2)
plt.axhline(0.7, color='k', lw=2)
plt.axvline(0.005, color='k', lw=2)
plt.axvline(10, color='k', lw=2)

plt.show()

我有以下问题

1-如何修复x轴格式,使最后2个数字应写为1和10(而不是1.00和10.00)

2-在y轴上:我不想写所有的数字,只写几个。如何将其设置为:0.07、0.1、0.3、0.6

3-如何去除角落的记号

编辑1(问题3的更多详细信息) 如果您更仔细地观察,在下图中的蓝色矩形内,角不平滑。这是因为我使用
plt.axhline
plt.axvline
绘制了一条线(使边界变厚)。这些线在拐角处过度绘制的记号会使拐角变得不平滑。我的想法是去除角落上的虱子,使其光滑。除非有我不知道的更聪明的方法

对于您的问题#1,您需要以下格式设置:

import matplotlib.ticker as ticker

def customizedLogFormat(x,pos):
  decimalplaces = int(np.maximum(-np.log10(x),0))
  formatstring = '{{:.{:1d}f}}'.format(decimalplaces)      
  return formatstring.format(x)  
然后

ax.xaxis.set_major_formatter(ticker.FuncFormatter(customizedLogFormat))
关于你的问题#2,我真的不知道用什么聪明的方法来实现你的目标。。。但经过一些测试后,我认为“设置”是一种可行的方法:

ax.yaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter("%.2f"))
#ax.yaxis.set_minor_formatter(matplotlib.ticker.FormatStrFormatter("%.2f"))  
ax.set_yticks([0.07, 0.1, 0.3, 0.6])
ax.get_yaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) 
对于您的问题#3,您可以通过以下代码设置记号位置:

ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

Oooops@阿罗哈。我想我误解了你在第三季度想要什么。你说的“从角落里清除虱子”是什么意思?我无法想象。给我们一个清晰的例子。我在第三季度添加了更多细节。你对我的问题1的回答并没有改变结果。我仍然得到相同的数字。知道为什么吗?Q1的答案有效,我的代码有点错误。A2也起了作用。我仍然需要修复Q3。许多的thanks@aloha我知道你的问题。您所要做的就是更改轴范围的设置。例如,plt.xlim(xmin=0.0055,xmax=10.0005)。这样记号就不会出现在绘图的边界上。但请记住更改附加边框的位置。问题3的答案很简单:
matplotlib.rcParams['axes.linewidth']=2