我想对绘图中的几个选定的刻度标签进行一些修改.
例如,如果我这样做:
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
Run Code Online (Sandbox Code Playgroud)
更改刻度标签的字体大小和方向.
但是,如果尝试:
label.set_text('Foo')
Run Code Online (Sandbox Code Playgroud)
刻度标签未被修改.如果我这样做:
print label.get_text()
Run Code Online (Sandbox Code Playgroud)
没有打印.
这里有些陌生.当我尝试这个时:
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
Run Code Online (Sandbox Code Playgroud)
仅打印空字符串,但该图包含标记为"0.0","0.5","1.0","1.5"和"2.0"的刻度线.
我一直在寻找解决这个简单问题的高低,但我无法在任何地方找到它!有大量帖子详细说明了二维数据的semilog/loglog绘图,例如plt.setxscale('log')但是我有兴趣在3d图上使用对数刻度(mplot3d).
我没有准确的代码,所以不能在这里发布,但下面的简单例子应该足以解释这种情况.我目前正在使用Matplotlib 0.99.1,但很快就会更新到1.0.0 - 我知道我必须更新我的mplot3d实现代码.
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-5, 5, 0.025)
Y = np.arange(-5, 5, 0.025)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, extend3d=True)
ax.set_zlim3d(-1.01, 1.01)
ax.w_zaxis.set_major_locator(LinearLocator(10))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
fig.colorbar(surf)
plt.show()
Run Code Online (Sandbox Code Playgroud)
上面的代码将在3D中精细绘制,但三个刻度(X,Y,Z)都是线性的.我的'Y'数据跨越了几个数量级(如9!),因此在对数刻度上绘制它非常有用.我可以通过获取'Y'的日志,重建numpy数组并在线性刻度上绘制日志(Y)来解决这个问题,但是在真正的python风格中我正在寻找更智能的解决方案,它将绘制数据对数表.
是否可以使用对数刻度生成我的XYZ数据的3D表面图,理想情况下我喜欢线性刻度上的X和Z以及对数刻度上的Y?
任何帮助将不胜感激.请原谅上面例子中的任何明显错误,如上所述我没有我的确切代码,所以从我的记忆中改变了matplotlib画廊示例.
谢谢
我在“如何从统计学习元素中绘制 k 最近邻分类器的决策边界?” . 在本例中,K-NN 用于将数据分为三类。我特别喜欢它以班级成员的概率作为“信心”的标志。
r并且ggplot似乎做得很好。我想知道,这是否可以在 python 中重新创建?我最初的想法倾向于scikit-learn和matplotlib。这是来自 scikit 的 iris 示例:
print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import neighbors, datasets
n_neighbors = 15
# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features. We could
# avoid this ugly slicing by using a two-dim dataset
y = iris.target
h …Run Code Online (Sandbox Code Playgroud)