我有以下简单的脚本绘制图表:
import matplotlib.pyplot as plt
import numpy as np
T = np.array([6, 7, 8, 9, 10, 11, 12])
power = np.array([1.53E+03, 5.92E+02, 2.04E+02, 7.24E+01, 2.72E+01, 1.10E+01, 4.70E+00])
plt.plot(T,power)
plt.show()
Run Code Online (Sandbox Code Playgroud)
就像现在一样,这条直线从一点到另一点直线看起来不错,但在我看来可能更好.我想要的是平滑点之间的界限.在Gnuplot,我会用smooth cplines
.
在PyPlot中有一种简单的方法吗?我找到了一些教程,但它们看起来都相当复杂.
基于这个关于matplotlib中的热图的问题,我想将x轴标题移动到图的顶部.
import matplotlib.pyplot as plt
import numpy as np
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = np.random.rand(4,4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)
# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)
# want a more natural, table-like display
ax.invert_yaxis()
ax.xaxis.set_label_position('top') # <-- This doesn't work!
ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(column_labels, minor=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是,调用matplotlib的set_label_position(如上所述)似乎没有达到预期的效果.这是我的输出:
我究竟做错了什么?
1)是否有任何R库/函数可以在R图中实现INTELLIGENT标签放置?我尝试了一些,但它们都有问题 - 许多标签彼此重叠或其他点(或图中的其他对象,但我发现这更难处理).
2)如果没有,有什么方法可以如何舒适地帮助算法与特定问题点的标签放置?最舒适,最有效的解决方案.
您可以使用我可重复的示例来玩和测试其他可能性,看看您是否能够取得比我更好的结果:
# data
x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012,
0.9055, 1.3307)
y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542,
0.9717, 0.9357)
ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho",
"SaxRub", "TurMer", "TurPil", "TurPhi")
# basic plot
plot(x, y, asp=1)
abline(h = 1, col = "green")
abline(v = 1, col = "green")
Run Code Online (Sandbox Code Playgroud)
为了标记,我尝试了这些可能性,没有人真的很好:
1)这个很可怕:
text(x, y, labels = ShortSci, cex= 0.7, offset = 10)
Run Code Online (Sandbox Code Playgroud)
2)如果您不想为所有点放置标签,但仅针对异常值,这一点很好,但是,标签通常也是错误的:
identify(x, y, labels = …
Run Code Online (Sandbox Code Playgroud) 如何将文本放在matplotlib图的左上角(或右上角),例如左上角的图例,或者在图的顶部,但在左上角?例如,如果它是plt.scatter(),那么将在散射的正方形内的东西放在最左上角.
我想在没有理想地知道绘制的散点图的比例的情况下这样做,因为它将从数据集更改为数据集.我只是希望文本大致位于左上角,或大致位于右上角.对于图例类型定位,它不应与任何散点图点重叠.
谢谢!
y轴标题显得太靠近轴文本.
ggplot(mpg, aes(cty, hwy)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
我试过改变许多参数的值,theme()
但似乎没有任何帮助.
我matplotlib
用来绘制Python的数据(使用plot
和errorbar
函数).我必须绘制一组完全独立且独立的图,然后调整它们的ylim
值,以便可以轻松地进行视觉比较.
如何ylim
从每个绘图中检索值,以便我可以分别获取下ylim值和上ylim值的min和max,并调整绘图以便可以直观地比较它们?
当然,我可以分析数据并提出我自己的自定义ylim
值...但我想用matplotlib
它为我做这件事.关于如何轻松(和有效)地做到这一点的任何建议?
这是我使用的Python函数matplotlib
:
import matplotlib.pyplot as plt
def myplotfunction(title, values, errors, plot_file_name):
# plot errorbars
indices = range(0, len(values))
fig = plt.figure()
plt.errorbar(tuple(indices), tuple(values), tuple(errors), marker='.')
# axes
axes = plt.gca()
axes.set_xlim([-0.5, len(values) - 0.5])
axes.set_xlabel('My x-axis title')
axes.set_ylabel('My y-axis title')
# title
plt.title(title)
# save as file
plt.savefig(plot_file_name)
# close figure
plt.close(fig)
Run Code Online (Sandbox Code Playgroud) 我需要制作一个空图.这是我能想到的最好的.
plot(0, xaxt = 'n', yaxt = 'n', bty = 'n', pch = '', ylab = '', xlab = '')
Run Code Online (Sandbox Code Playgroud)
更简单的解决方案?
PS:完全空,没有轴等.
我的数据可以在给定日期有多个事件,也可以在某个日期没有事件.我参加这些活动,按日期计算并绘制它们.但是,当我绘制它们时,我的两个系列并不总是匹配.
idx = pd.date_range(df['simpleDate'].min(), df['simpleDate'].max())
s = df.groupby(['simpleDate']).size()
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,idx成为30个日期的范围.S 01-01-2013至09-30-2013但是S可能只有25天或26天,因为在给定日期没有发生任何事件.然后,当我尝试绘制时,我得到一个AssertionError,因为大小不匹配:
fig, ax = plt.subplots()
ax.bar(idx.to_pydatetime(), s, color='green')
Run Code Online (Sandbox Code Playgroud)
解决这个问题的正确方法是什么?我是否要删除IDX中没有值的日期或(我宁愿这样做)将系列添加到缺少日期的计数为0.我宁愿拥有30天的完整图表,其中包含0值.如果这种方法是正确的,那么有关如何开始的任何建议?我需要某种动态reindex
功能吗?
这是一个S(df.groupby(['simpleDate']).size()
)的片段,注意没有04和05的条目.
09-02-2013 2
09-03-2013 10
09-06-2013 5
09-07-2013 1
Run Code Online (Sandbox Code Playgroud) 我使用matplotlib制作一些图表,不幸的是我没有白色背景导出它们.
换句话说,当我导出这样的图并将其放在另一个图像的顶部时,白色背景会隐藏它背后的内容,而不是允许它透过.如何导出透明背景的图?