R 仅为所有非零列绘制条形图

R 仅为所有非零列绘制条形图,r,ggplot2,R,Ggplot2,我有一个data.frame,有一条记录和一个N个数字列。 我想在R中绘制一个条形图,在ggplot中的同一个图形中,所有列都具有非零值 例如: df对于条形图,您可以使用tidyr将数据转换为与ggplot兼容的较长格式,并使用过滤器删除零值: 库(tidyverse) 图书馆(GG2) df=数据帧(a=1,b=0,c=10,d=20) df%>%pivot\u更长(everythings(),names\u to=“Variable”,values\u to=“values”)%>%fil

我有一个
data.frame
,有一条记录和一个N个数字列。 我想在
R
中绘制一个条形图,在
ggplot
中的同一个图形中,所有列都具有非零值

例如:


df对于条形图,您可以使用
tidyr
将数据转换为与ggplot兼容的较长格式,并使用
过滤器删除零值:

库(tidyverse)
图书馆(GG2)
df=数据帧(a=1,b=0,c=10,d=20)
df%>%pivot\u更长(everythings(),names\u to=“Variable”,values\u to=“values”)%>%filter(,values!=0)
#一个tibble:3x2
可变值
1 a 1
2 c 10
三维20
如果您将其与
ggplot
相结合,它将为您提供:

df%>%pivot\u更长(everythings(),names\u to=“Variable”,values\u to=“values”)%%>%filter(,values!=0)%%>%
ggplot(,aes(x=变量,y=值,fill=变量))+
几何图形栏(stat=“identity”)

在base R中,这与

barplot(unlist(df[1, df[1, ] != 0]))

如果您更喜欢
ggplot2
图形

library(tidyverse)

df %>%
  gather(key, value) %>%
  filter(value != 0) %>%
  ggplot(aes(x = key, y = value)) +
  geom_col()

请不要发布数据图片,它们几乎无法使用。以可复制/粘贴的文本形式共享数据,例如,
dput(前10行和前5列的_数据[1:10,1:5])
——大量数据可用于演示解决方案。此外,在R中,
NA
用于缺少的数据,
0
字面上表示零,
NULL
用于未定义的对象(与缺少的值不同)。当您有一张数据图片时,没有
NA
NULL
值,但有一些
0
s。当你说“具有非空值的列”时,请具体说明你的意思。所有列都是数字。问题已更新。感谢以可复制/粘贴文本的形式共享数据,例如,第一(仅)行和前5列的
dput(您的_数据[1,1:5])
。在R中键入该命令,用数据框的实际名称替换
您的_数据
,并将结果编辑到您的问题中。还请注意条形图(离散/分类x轴,每个类别1条,每个条形图显示一个计数或值)与直方图之间的差异(连续的x轴,分为覆盖间隔的条,条的总面积加起来是1)。你的python代码生成一个条形图,这是你想要的吗?还是你想要一个柱状图?好的。明白了。太好了,你能部署相同的dplyr库吗。对不起,我忘记了零值的
过滤
,我正在编辑我的答案
library(tidyverse)

df %>%
  gather(key, value) %>%
  filter(value != 0) %>%
  ggplot(aes(x = key, y = value)) +
  geom_col()