在我的绘图中使用了3种形状,class Form extends Component {
constructor(props) {
super(props);
this.state = {
task: '',
count: [1]
};
this.addTask = this.addTask.bind(this);
this.change = this.change.bind(this);
}
render() {
return (
<div>
<h1>Form</h1>
<form onSubmit = {this.onSubmit} method='post'>
<div>
{this.state.count.map((item, index) => {
return (
<div key={index}>
<input type='text' value={this.state.task} name='task' onChange={this.change} />
</div>
)
})}
</div>
<button onClick={this.addTask}>addTask</button>
<button>submit</button>
</form>
</div>
);
}
addTask(e) {
e.preventDefault();
this.setState({
count: [...this.state.count, '1']
})
}
onSubmit = (e) => {
e.preventDefault();
const {submit} = this.props;
submit({
task: this.state.task
});
this.setState({
task: ''
})
};
change(event) {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;
this.setState({
[name]: value
});
}
}
export default connect(null, { submit })(Form);
中仅使用了实心圆(如图所示)。我试图找到一种方法将所有形状都包含在该图例中,有没有办法做到这一点?
图的数据框和代码:
size legend
答案 0 :(得分:2)
我找到了一种解决方法,因为似乎没有简便的方法可以做到这一点。理想的解决方案是使形状彼此相邻,并在图例中只提及一次而不是重复。另外,此变通方法可能更具参数性,因为更改status
的数量并显示新形状后,可以正确构造所有馈送给覆盖函数的矢量:
l=c(5,10,25,50,75,100)
mybreaks=c(rep(l,3))
myshapes=c(rep(15,6),rep(16,6),rep(17,6))
ggplot(data, aes(x=date, y=cnt2)) +
scale_y_log10(breaks=c(1,10,100,1000,5000)) +
scale_size_continuous(trans="sqrt",range = c(1, 5),breaks=mybreaks) +
geom_point(aes(col=category, size=per, shape=status), alpha=0.7) +
guides(size=guide_legend(ncol=3,override.aes = list( shape =myshapes)))