如何更改ggplot()
图表中线条的透明度(即直方图,线图等)?
例如,考虑以下代码:
data <- data.frame(a=rnorm(100), b = rnorm(100,.5,1.2))
data <- melt(data)
colnames(data) <- c("Category", "Intensity")
p <- ggplot(data, aes(x=Intensity))
p <- p + geom_density(aes(color=Category), size=2, alpha=.4)
print(p)
Run Code Online (Sandbox Code Playgroud)
我预计线条会透明(如alpha=.4
),但它们不是.
我想创建下一个直方图密度图ggplot2
.以"正常"方式(基本包)非常简单:
set.seed(46)
vector <- rnorm(500)
breaks <- quantile(vector,seq(0,1,by=0.1))
labels = 1:(length(breaks)-1)
den = density(vector)
hist(df$vector,
breaks=breaks,
col=rainbow(length(breaks)),
probability=TRUE)
lines(den)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经达到了ggplot:
seg <- cut(vector,breaks,
labels=labels,
include.lowest = TRUE, right = TRUE)
df = data.frame(vector=vector,seg=seg)
ggplot(df) +
geom_histogram(breaks=breaks,
aes(x=vector,
y=..density..,
fill=seg)) +
geom_density(aes(x=vector,
y=..density..))
Run Code Online (Sandbox Code Playgroud)
但是"y"尺度具有错误的尺寸.我注意到下一次运行得到了正确的"y".
ggplot(df) +
geom_histogram(breaks=breaks,
aes(x=vector,
y=..density..,
fill=seg)) +
geom_density(aes(x=vector,
y=..density..))
Run Code Online (Sandbox Code Playgroud)
我只是不明白.y=..density..
在那里,应该是高度.那么为什么我试图填充它时我的尺度会被修改?
我确实需要颜色.我只想要一个直方图,其中根据默认的ggplot填充颜色定向设置每个块的中断和颜色.
我有一个包含值的数组,我想创建它的直方图.我主要对低端号码感兴趣,并希望在一个箱子中收集300以上的每个号码.此箱应具有与所有其他(同样宽)箱相同的宽度.我怎样才能做到这一点?
注意:此问题与此问题有关:在Matplotlib直方图中定义bin宽度/ x轴刻度
这是我到目前为止所尝试的:
import matplotlib.pyplot as plt
import numpy as np
def plot_histogram_01():
np.random.seed(1)
values_A = np.random.choice(np.arange(600), size=200, replace=True).tolist()
values_B = np.random.choice(np.arange(600), size=200, replace=True).tolist()
bins = [0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 600]
fig, ax = plt.subplots(figsize=(9, 5))
_, bins, patches = plt.hist([values_A, values_B], normed=1, # normed is deprecated and will be replaced by density
bins=bins,
color=['#3782CC', '#AFD5FA'],
label=['A', 'B'])
xlabels = np.array(bins[1:], dtype='|S4')
xlabels[-1] = '300+'
N_labels = len(xlabels)
plt.xlim([0, …
Run Code Online (Sandbox Code Playgroud) 我试图结合直方图和箱图来可视化连续变量.这是我到目前为止的代码
require(ggplot2)
require(gridExtra)
p1 = qplot(x = 1, y = mpg, data = mtcars, xlab = "", geom = 'boxplot') +
coord_flip()
p2 = qplot(x = mpg, data = mtcars, geom = 'histogram')
grid.arrange(p2, p1, widths = c(1, 2))
Run Code Online (Sandbox Code Playgroud)
除了x轴的对齐外,它看起来很好.谁能告诉我如何对齐它们?或者,如果某人有更好的方法来使用此图表ggplot2
,那么也会受到赞赏.
我有一个.txt文件,其中包含2D地图中规则间隔点的x,y值,第三个坐标是该点的密度.
4.882812500000000E-004 4.882812500000000E-004 0.9072267
1.464843750000000E-003 4.882812500000000E-004 1.405174
2.441406250000000E-003 4.882812500000000E-004 24.32851
3.417968750000000E-003 4.882812500000000E-004 101.4136
4.394531250000000E-003 4.882812500000000E-004 199.1388
5.371093750000000E-003 4.882812500000000E-004 1278.898
6.347656250000000E-003 4.882812500000000E-004 1636.955
7.324218750000000E-003 4.882812500000000E-004 1504.590
8.300781250000000E-003 4.882812500000000E-004 814.6337
9.277343750000000E-003 4.882812500000000E-004 273.8610
Run Code Online (Sandbox Code Playgroud)
当我在gnuplot中绘制此密度图时,使用以下命令:
set palette rgbformulae 34,35,0
set size square
set pm3d map
splot "dens_map.map" u 1:2:(log10($3+10.)) title "Density map"`
Run Code Online (Sandbox Code Playgroud)
这给了我这个美丽的形象:
现在我想用matplotlib获得相同的结果.
我想更改直方图的默认x范围.数据范围是7到12.但是,默认情况下,直方图从7开始,到13结束.我希望它从6.5开始,到12.5结束.但是,刻度应该从7到12.我该怎么做?
import asciitable
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import pylab
from pylab import xticks
data = asciitable.read(file)
hmag = data['col8']
visits = data['col14']
origin = data['col13']
n, bins, patches = plt.hist(hmag, 30, facecolor='gray', align='mid')
xticks(range(7,13))
pylab.rc("axes", linewidth=8.0)
pylab.rc("lines", markeredgewidth=2.0)
plt.xlabel('H mag', fontsize=14)
plt.ylabel('# of targets', fontsize=14)
pylab.xticks(fontsize=15)
pylab.yticks(fontsize=15)
plt.grid(True)
plt.savefig('hmag_histogram.eps', facecolor='w', edgecolor='w', format='eps')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OpenCV使用以下函数执行直方图均衡
Mat Histogram::Equalization(const Mat& inputImage)
{
if(inputImage.channels() >= 3)
{
vector<Mat> channels;
split(inputImage,channels);
Mat B,G,R;
equalizeHist( channels[0], B );
equalizeHist( channels[1], G );
equalizeHist( channels[2], R );
vector<Mat> combined;
combined.push_back(B);
combined.push_back(G);
combined.push_back(R);
Mat result;
merge(combined,result);
return result;
}
return Mat();
}
Run Code Online (Sandbox Code Playgroud)
但是当我得到结果时,输入和输出图像似乎没有区别,我做错了什么?
对不起图像质量不好,"预处理"(左)是直方图均衡,你可以看到它与输入相同(右).
错过了什么?
如何创建整数数组的直方图?例如:
data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10]
Run Code Online (Sandbox Code Playgroud)
我想基于有多少项有用于创建直方图0
,1
,2
,等等.在Ruby中有一个简单的方法吗?
输出应该是两个数组.第一个数组应包含组(bin),第二个数组应包含出现次数(频率).
对于data
上面给出的,我希望以下输出:
bins # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
frequencies # => [1, 1, 5, 6, 4, 2, 3, 5, 1, 2, 1]
Run Code Online (Sandbox Code Playgroud) 我想用直方图中的每个条形标记该区域中的计数数量或该区域中总计数的百分比.我敢肯定必须有办法做到这一点,但我找不到它.这个页面有几张SAS直方图的照片,基本上我正在尝试做的事情(但该网站似乎没有R版本):http://www.ats.ucla.edu/stat/sas/常见问题/ histogram_anno.htm
如果可能的话,根据需要,可以灵活地将标签放在条形图的上方或某处.
我正在尝试使用基本R绘图工具,但我对ggplot2和格子中的方法感兴趣.
我想根据我的样本绘制概率密度函数的近似值; 模拟直方图行为的曲线.我可以提供我想要的样品.