C# 折线图如何创建垂直线

2024-01-08

我有一个折线图。例如这样;

我想画一条垂直线,其底部有一个标签。当我将标签拖动到这些 x 点上方时,我希望该标签以其垂直线穿过图表的 x 点。我将得到带标签的线与 Y 轴匹配的 y 点

例如;

我怎样才能做到这一点?


此解决方案允许您左右拖动注释线并更新(右对齐)标题字段中的 X 和 Y 值。

更新:我纠正了一些有关缩放的问题,并添加了一个可以显示 Y 值的例程。这样做是有限制的,见下文!

为了在移动事件中更容易参考,我在类级别声明了一些变量。 (你也可以进行演员表sender相反并通过名称或索引引用它们..)

ChartArea CA;
Series S1;
VerticalLineAnnotation VA;
RectangleAnnotation RA;

这将创建Annotations:

CA = chart1.ChartAreas[0];  // pick the right ChartArea..
S1 = chart1.Series[0];      // ..and Series!

// factors to convert values to pixels
double xFactor = 0.03;         // use your numbers!
double yFactor = 0.02;        // use your numbers!

// the vertical line
VA = new VerticalLineAnnotation();
VA.AxisX = CA.AxisX;
VA.AllowMoving = true;
VA.IsInfinitive = true;
VA.ClipToChartArea = CA.Name;
VA.Name = "myLine";
VA.LineColor = Color.Red;
VA.LineWidth = 2;         // use your numbers!
VA.X = 1; 

// the rectangle
RA = new RectangleAnnotation();
RA.AxisX = CA.AxisX;
RA.IsSizeAlwaysRelative = false;
RA.Width = 20 * xFactor;         // use your numbers!
RA.Height = 8 * yFactor;        // use your numbers!
VA.Name = "myRect";
RA.LineColor = Color.Red;
RA.BackColor = Color.Red;
RA.AxisY = CA.AxisY;
RA.Y = -RA.Height ;
RA.X = VA.X - RA.Width / 2;

RA.Text = "Hello";
RA.ForeColor = Color.White;
RA.Font = new System.Drawing.Font("Arial", 8f);

chart1.Annotations.Add(VA);
chart1.Annotations.Add(RA);

这将用以下行移动标签:

private void chart1_AnnotationPositionChanging(object sender, 
                    AnnotationPositionChangingEventArgs e)
{
    // move the rectangle with the line
    if (sender == VA) RA.X = VA.X - RA.Width / 2;

    // display the current Y-value
    int pt1 = (int)e.NewLocationX;
    double step = (S1.Points[pt1 + 1].YValues[0] - S1.Points[pt1].YValues[0]);
    double deltaX = e.NewLocationX - S1.Points[pt1].XValue;
    double val = S1.Points[pt1].YValues[0] + step * deltaX;
    chart1.Titles[0].Text = String.Format(
                            "X = {0:0.00}   Y = {1:0.00}", e.NewLocationX, val);
    RA.Text = String.Format("{0:0.00}", val);
    chart1.Update();
}

如果要添加此事件以使线捕捉到下一个数据点:

private void chart1_AnnotationPositionChanged(object sender, EventArgs e)
{
    VA.X = (int)(VA.X + 0.5);
    RA.X = VA.X - RA.Width / 2;
}

请注意,Y 值的计算假定某种线条图形。

我添加了几行来显示标签中的值。如果该文本的长度变化很大,则应该相应地计算标签的宽度!

这是我的示例的快照:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 折线图如何创建垂直线 的相关文章

  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K

随机推荐

  • 分配零容量ByteBuffer [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 谁能告诉我分配零长度缓冲区的可能目的是什么 ByteBuffer allocate 0 no IllegalArgumentException
  • 将字节的二进制字符串表示形式转换为 Python 中的实际二进制值

    我有一个字节的二进制字符串表示形式 例如 01010101 如何将其转换为真正的二进制值并将其写入二进制文件 Use the int功能 http docs python org library functions html int wit
  • 智能脸4.3.0。 IOS模拟器错误

    Smartface 模拟器适用于 Android 但对于 ios 它给我 保持冷静 您需要从应用商店下载正在运行的 Smartface 然后重试 错误 但我已经安装了 我的itunes版本是12 1 2 我检查了防火墙 它没有阻止 idb
  • 有什么方法可以用预处理器替换部分单词吗?

    我的 Objective C 课上有类似的东西 interface PREFIX MyClass end 我想使用预处理器将其转换为 interface AwesomeMyClass end 所以像 define PREFIX Awesom
  • C/C++ 中文件名中的下划线有什么规则吗?

    我知道有使用下划线的规则身份标识在 C C 中 https stackoverflow com a 228797 1995714 在源代码文件名中使用它们有什么规则吗 例如 对于以下划线开头或结尾的文件名是否有任何限制 或者将下划线作为最后
  • java中如何将对象添加到ArrayList中

    这里有两个类 查询语句和stackov 数组列表用于存储查询语句类的对象 但是最近添加的对象会覆盖之前的对象 如何添加对象以使它们不被覆盖 查询语句 java public class QuerySentence public static
  • 将 WinForms 应用程序与本机 DLL 一起打包

    尝试找出如何使用 Visual Studio 2017 Desktop Bridge 应用程序打包项目 打包以下解决方案 NET 库 DLL WinForms 可执行文件引用 1 本机 C DLL 通过 DllImport 导出 1 和 2
  • el-api-1.0.jar - jar 未加载 - 违规类:javax/el/Expression.class

    我正在尝试使用 RestEasy 运行一个简单的安静服务 以下是我的设置 汤姆猫7 Eclipse 和 Maven Maven 安装并将 war 文件复制到 webapps 文件夹 部署 war 文件时 catalina out 文件会显示
  • 使用 strtod strtof atof printf 进行区域设置不变的字符串处理?

    是否有计划添加在当前语言环境下不变的 C 标准库字符串处理函数版本 目前有很多脆弱的解决方法 例如来自 jansson strconv c 的 static void to locale strbuffer t strbuffer cons
  • 将 c 字符串中的字符转换为其转义序列

    我需要一个像这样的函数字符串ToLiteral 字符串输入 from 这个帖子 https stackoverflow com questions 323640 can i convert a c string value to an es
  • 如何在存储过程之间共享数据[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在 MS SqlServer 中 存
  • Lighttpd 配置,.我的查询字符串中的(点)导致 404

    我的网站上有一个地址 如下所示 http www example com lookup q http 3A 2F 2Fgigaom com 2F2010 2F10 2F10 2f Angry birds for windows 7 phon
  • Symfony2:设置 cookie

    我正在尝试在登录控制器中设置 cookie 以实现 记住我 系统 尽管我使用了在网上找到的确切代码 但对我来说事情还是出了问题 我希望你能帮我弄清楚我错过了什么 让我们看一下代码 public function loginAction Re
  • 为什么short在C中的结构体中存储为4个字节?

    我有以下两个结构 问题是 sizeof Content 返回 160 该结构由 11 个短整型 6 个整数 76 个字符 7 个浮点 1 个双精度组成 总共添加到 158 个字节 我数了三遍 还是有2个字节的差别 typedef struc
  • 如何从组件内部调用组件的destroy?

    我有一个模态组件 我希望能够在用户单击 x 按钮时销毁它 我还有一个通知弹出窗口 它会在一段时间后自行销毁 但我想让用户能够通过以下方式关闭它 x 按钮也是如此 我知道我可以将事件传递给组件 但我认为如果组件具有自毁性 那就更好了 对于这种
  • Eclipse C/C++ 中的发现选项

    我不是一名程序员 最近才决定深入研究使用 Eclipse C C 来编程 ARM 微控制器 而我的问题是设置 IDE 基本上 我遵循这里的方向 https openwsn atlassian net wiki display OW GNU
  • 使用 tomcat 管理器应用程序相对于复制到 webapp 目录的优点

    我最近一直在思考 为什么要使用 tomcat 管理器来部署 取消部署 war 到你的服务器 与简单地将其复制到 webapps 文件夹方法和从 webpass 文件夹删除方法相比 其优点 缺点是什么 另外 当删除战争时 tomcat 的清理
  • 二进制 R 热图仍然显示梯度

    我正在尝试在 R 中绘制二进制数据矩阵 11 x 1500 的热图 heatmap y col hmcols 矩阵 y 看起来像这样 1 2 3 4 5 6 7 8 9 10 11 12 13 1 0 0 0 0 1 1 1 1 1 1 1
  • Swift 中的图像加密

    我在用IDZSwiftCommonCrypto使用 StreamCryptor 进行图像加密 其 GitHub 页面上有一个示例 https github com iosdevzone IDZSwiftCommonCrypto https
  • C# 折线图如何创建垂直线

    我有一个折线图 例如这样 我想画一条垂直线 其底部有一个标签 当我将标签拖动到这些 x 点上方时 我希望该标签以其垂直线穿过图表的 x 点 我将得到带标签的线与 Y 轴匹配的 y 点 例如 我怎样才能做到这一点 此解决方案允许您左右拖动注释