- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在 scatterplot 中显示(注释)值当鼠标移动/悬停在符号或线条上时。我知道之前有人问过这个问题,但我只能找到要求用户单击绘图以显示此信息的答案。我试图在我的 plotView 委托(delegate)中实现 mouseMoved 方法:
- (void)mouseMoved:(NSEvent *)theEvent
{
NSPoint location = [hostingView convertPoint: [theEvent locationInWindow] fromView: nil];
CGPoint mouseLocation = NSPointToCGPoint(location);
CGPoint pointInHostedGraph = [hostingView.layer convertPoint: mouseLocation toLayer: plotItem.graph.plotAreaFrame.plotArea];
NSUInteger index = [self.plotItem.dataSourceLinePlot indexOfVisiblePointClosestToPlotAreaPoint: pointInHostedGraph];
NSLog(@"test: %lu",(unsigned long)index);
在这里,plotItem 是 NSObject 的一个子类,并且像 example 中的 PlotItem.h 一样定义。托管 View 是 CPTGraphHostingView 的一个实例。我还补充:
CPTGraphHostingView *hostedlayer=[self.plotItem updateView:hostingView height:hostingView.frame.size.height width:hostingView.frame.size.width];
[self.plotItem renderInView:hostedlayer withTheme:theme animated:YES withData:self.myFlattenedNodes];
hostedlayer.window.acceptsMouseMovedEvents = YES;
[hostedlayer.window makeFirstResponder:hostingView];
但是我的 mouseMoved 方法没有被调用。我在这里做错了什么,因为我无法让 mouseMoved 响应我的悬停。我需要将 NSTrackingArea 添加到 hostedLayer 吗?建议表示赞赏。
更新和解决方案:我听从了 Erics 的建议并将我的 CPTGraphHostingView 子类化,我在其中实现了以下内容:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.window.acceptsMouseMovedEvents = YES;
[self.window makeFirstResponder:self];
area = [[NSTrackingArea alloc] initWithRect:self.frame
options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow| NSTrackingActiveAlways)
owner:self userInfo:nil];
[self addTrackingArea:area];
[self becomeFirstResponder];
}
return self;
}
- (void)updateTrackingAreas {
[self removeTrackingArea:area];
area = [[NSTrackingArea alloc] initWithRect:self.frame
options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow| NSTrackingActiveAlways)
owner:self userInfo:nil];
[self addTrackingArea:area];
}
- (void)mouseMoved:(NSEvent *)theEvent
{
NSPoint location = [self convertPoint: [theEvent locationInWindow] fromView: nil];
CGPoint mouseLocation = NSPointToCGPoint(location);
[self setLocationOfMouse:[self.layer convertPoint: mouseLocation toLayer:nil]];
}
-(void) dealloc{
[self removeTrackingArea:area];
}
我还定义了类的属性:
CGPoint locationOfMouse;
NSTrackingArea *area;
在我的 Controller 中,我为 locationOfMouse 属性添加了一个观察者:
[self.plotItem.graphHostingView addObserver:self
forKeyPath:@"locationOfMouse"
options:0
context:NULL];
这触发了我绘制注释的方法:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ( [keyPath isEqualToString:@"locationOfMouse"] ) {
CGPoint location = self.plotItem.graphHostingView.locationOfMouse;
[self.plotItem mouseMovedOverGraph:location];
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
}
最佳答案
Core Plot 不会将鼠标移动事件传递给它的任何委托(delegate)。子类 CPTGraphHostingView
(它是 NSView
的子类)并在那里实现 -mouseMoved:
方法。 Core Plot 仅使用鼠标按下、拖动和向上事件,因此您不会干扰任何内置事件处理。
关于objective-c - 核心情节 mouseMoved,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21818964/
我有这样一个数据框 from datetime import date import random start_date = date.today().replace(day=1, month=1).
我想使用 fiddle 图比较技术化的几个维度的分布(维度由 1 到 5 的指数衡量)。 6 个 fiddle 图中有 5 个看起来与您预期的一样,但其中一个具有未反射(reflect)在数据中的非常
我正在将向量列表绘制为一系列 fiddle 图。我会使用 pandas 数据框,但列表的长度不等。 这有效: python g = sns.violinplot (data=res, cut=0, i
以下代码为我提供了一个非常漂亮的 fiddle 图(以及其中的箱线图)。 import numpy as np import seaborn as sns import matplotlib.pypl
我有以下代码来显示堆叠条 handles = df.toPandas().set_index('x').T.plot(kind='bar', stacked=True, figsize=(11,11)
目前我在 2x2 子图中绘制了 3 个图。它看起来像这样: fig, axes = plt.subplots(nrows=2, ncols=2) df1.plot('type_of_plot', ax
以下代码为我提供了一个非常漂亮的 fiddle 图(以及其中的箱线图)。 import numpy as np import seaborn as sns import matplotlib.pypl
我正在使用带有以下代码的 ggplot 的 python 版本并附加了图像,但颜色不足以为所有类别着色。我想知道有什么方法可以获得具有更多颜色的调色板,但仍然保留较低数字颜色较浅而较高数字颜色较深的关
我正在查看示例,但一切都需要数据框。 如果我有以下数据框: x = ["G","F","E","D","C","B"] y = [3,14,45,47,34,15] df = pd.DataFrame
我有很多数据框正在绘制用于演示。这些都有不同的列,但都包含相同的附加列 foobar。目前,我正在使用绘制这些不同的数据框 df.plot(secondary_y='foobar') 不幸的是,由于这
我无法让 Bokeh 显示我的绘图。这是我的 Python 代码。 import pandas as pd from bokeh.plotting import figure, ColumnDataS
我使用 matplot 库在 python 中绘制绘图。我必须生成的数字非常大,所以轴上的刻度也是很大的数字并且占用大量空间。我试图将它们呈现为幂(例如,我想要 10^8 而不是勾选 10000000
我使用 matplot 库在 python 中绘制绘图。我必须生成的数字非常大,所以轴上的刻度也是很大的数字并且占用大量空间。我试图将它们呈现为幂(例如,我想要 10^8 而不是勾选 10000000
我只想制作一个地毯图,其中每个系列都被绘制为水平的刻度带,类似于所示的图 on this page .我也见过这叫做“光栅图”。地毯图看起来很相似,但看起来 geom_rug 只适用于边距。我可以在
我正在使用此处示例中的代码绘制一个图: http://bl.ocks.org/mbostock/3887118 我是 HTML、CSS 和 JS 的新手,但了解一些基础知识。我想知道如何将绘图置于浏览
有一个 df : import random import pandas as pd def get_row(): row = {"date" : random.choice(range(10
第一个加载的绘图在 X 轴上有太多刻度(参见 image01)。 如果我在 X 轴上使用缩放操作,绘图现在已加载完毕。 你能给我一些建议,我可以在哪里搜索,因为 Plot 构造函数参数看起来不错。 d
我正在尝试为我的情节添加标题,但收到错误消息: "AttributeError: 'Figure' object has no attribute 'update_layout'" 该情节在没有 up
我想在 python 中使用 networkx 绘制有向网络图。当使用不同于 1 的 alpha 值时,边缘的起点也在节点内绘制;但是箭头很好。 如何让边远离我的节点? 我没有在文档中找到任何关于它的
出于视觉效果的目的,我希望我可以删除圆圈外的网格,只保留圆圈内的网格。 顺便说一句,如何用红色填充单元格 ([8,9],[9,10]),我的意思是,x=8 右侧和 y=9 下方的单元格。 我的代码在下
我是一名优秀的程序员,十分优秀!