我正在尝试将我的y轴缩放为这样:
所以我尝试了以下内容: scale_y_continuous(breaks = c(0,0.9,0.99,0.999))
然而,结果是:
如何根据指定的数字缩放图表?更具体地说,我可以根据值数组缩放图形吗?比如c =(0,0.9,0.99,0.999)。
这是我到目前为止编写的代码:
async function findChildz(commid) {
const post = await Comment.findByIdAndUpdate(commid, {$push: {children: newComment}}, {new: true}).exec();
const dataa = await Comment.find({chapterId: req.body.xxchid}).exec();
const onlydata = await Comment.find({_id: commid}).exec();
const childz = await Promise.all(onlydata[0].children.map(child => {
return Comment.find({ _id: child })
.exec()
.then(onlydatac => {
return onlydatac[0].body;
});
}));
return childz;
}
// then you can simple call the async function like
findChildz(commid)
.then(childz => {
// you get you childz array
});
示例CSV数据:
library(ggplot2)
library(extrafont)
library(scales)
results = read.csv("results.csv")
breaks = c(0, 0.9, 0.99, 0.999)
ggplot(data=results, aes(x=t, y=Values, group=Algorithm, color = factor(Algorithm), shape = factor(Algorithm))) +
geom_line(size = 1)+
theme_bw() +
theme(legend.position="top") +
labs(color="") +
theme(axis.text=element_text(size=14),
axis.title=element_text(size=16),
legend.text=element_text(size=16)) +
scale_y_log10(breaks=breaks, labels=breaks)
答案 0 :(得分:2)
根据我从您的数据中理解,您似乎想要放大您的绘图以查看(0.9 - 0.99)
范围内的数据是如何分布的。在ggplot
中,建议您使用facets
来突出显示数据中的重要细分。
您可以选择创建facets
,方法是将您的数据划分为多个感兴趣的细分(您的情况范围)。像下面这样的东西会产生你的范围之外的3个部分。
library(dplyr)
results = results %>%
mutate(grp = case_when(Values<0.9 ~ "0 - 0.9",
Values>=0.9 & Values<0.99 ~ "0.9 - 0.99",
Values>=0.99 ~ "0.99+"))
results %>%
ggplot(aes(x = t, y = Values, group = Algorithm, color = Algorithm)) +
geom_line(size = 1) +
facet_wrap(~grp, scales = "free") +
theme(legend.position="top") +
labs(color="") +
theme(axis.text=element_text(size=14),
axis.title=element_text(size=16),
legend.text=element_text(size=16))
或者,您可以选择在一个图表中显示整个数据,并使用您选择的细分创建构面。下面我只展示了一个可以放大的片段。
plot_df = bind_rows(`All Data` = results,
`Segment (0.9 - 0.99)` = results %>% filter(grp=="0.9 - 0.99"),
.id = "Groups")
plot_df %>%
ggplot(aes(x = t, y = Values, group = Algorithm, color = Algorithm)) +
geom_line(size = 1) +
facet_wrap(~Groups, scales = "free") +
theme(legend.position="top") +
labs(color="") +
theme(axis.text=element_text(size=14),
axis.title=element_text(size=16),
legend.text=element_text(size=16))
在一个情节中打破规模并不是一个好主意,因为它可能导致用户的错误解释。
修改强>
您问题中的图表可以使用用户定义的比例变换重现,如下所示。
library(scales)
foo_trans = function() trans_new("foo", function(x) log(1/(1-x)), function(x) -1/exp(x) + 1)
results %>%
ggplot(aes(x = t, y = Values, group = Algorithm, color = Algorithm)) +
geom_line(size = 1) +
theme(legend.position="top") +
labs(color="") + ylab("Values (Tranformed Scale)") +
theme(axis.text=element_text(size=14),
axis.title=element_text(size=16),
legend.text=element_text(size=16)) +
scale_y_continuous(breaks = c(0,0.9,0.99,0.999), labels = c(0,0.9,0.99,0.999)) +
coord_trans(y = "foo")
正如您在玩具示例中所看到的,使用代码转换了y轴,并且未应用任何数据转换。计算上可以这样做,但我更喜欢第一种表示方法。您可能需要参考其他答案here和here来解决实际问题。
答案 1 :(得分:0)
您正在寻找scale_y_log10
将scale_y_continuous(breaks=c(0, 0.9, 0.99, 0.999))
替换为scale_y_log10(breaks=c(0, 0.9, 0.99, 0.999))