องค์ประกอบตำแหน่งที่มีจุดสำหรับไดอะแกรมระบบควบคุมได้อย่างไร

ฉันต้องการควบคุมการวางตำแหน่งขององค์ประกอบบางอย่างในตัวอย่างต่อไปนี้:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID -> P1 -> P2;
        P2-> join [arrowhead=none];
        join -> {OUT; M1};
        PID -> M1 [dir=back];
}

แผนภาพบล็อกระบบควบคุม

  1. ถ้าฉันเพิ่มองค์ประกอบเพิ่มเติมให้กับอันดับ M1 ขอบจะเชื่อมต่อกับจุดสุ่ม (ด้านเหนือ/ด้านบน) ฉันต้องการให้พวกเขาเชื่อมต่อในแนวนอน สามารถทำได้หรือไม่?
  2. ฉันจะเพิ่มระยะห่าง (ความยาวขอบ) ระหว่าง PID/P1/P2 ได้อย่างไร
  3. การจัดตำแหน่ง P1/M1 ในแนวตั้งจะเป็นการดี สามารถทำได้หรือไม่?
  4. ไดอะแกรมระบบควบคุมแบบดั้งเดิมไม่มีโหนด รวม และขอบเพิ่งออกมาจากขอบอื่น เป็นไปได้ไหม ฉันถอดหัวลูกศรออกเพื่อสิ่งนี้

บางทีคำถามบางข้ออาจไม่เกี่ยวข้องเนื่องจากการวางตำแหน่งที่เหมาะสมของคำถามหนึ่งจะทำให้คำถามอื่นๆ เกิดขึ้นตามธรรมชาติ


person artless noise    schedule 17.11.2019    source แหล่งที่มา
comment
แผนภาพที่คล้ายกัน... ฉันเดาว่าฉันสามารถใช้หัวลูกศรอื่น (ไม่มี) เพื่อให้ 'P2' เข้าร่วมโหนดได้   -  person artless noise    schedule 17.11.2019


คำตอบ (1)


  1. โดยทั่วไปคุณสามารถควบคุมจุดที่ลูกศรเข้าสู่โหนดด้วย headport แอตทริบิวต์ แต่ด้วย ortho splines สิ่งนี้ไม่ค่อยได้ผล Ortho splines ใช้ชีวิตของตัวเองและอาจทำให้เกิดปัญหาต่างๆ มากมาย รวมถึงป้ายกำกับขอบที่หายไป ดังนั้นจึงไม่มีคำตอบที่ชัดเจนสำหรับคำถามแรกของคุณ แต่ละสถานการณ์จะต้องได้รับการจัดการโดยเฉพาะ

  2. คุณสามารถเพิ่มระยะห่างระหว่างโหนด ทั้งหมด ได้โดยการตั้งค่า nodesep แอตทริบิวต์กราฟ แต่หากคุณต้องการเพิ่มระยะห่างเฉพาะระหว่างโหนดใดโหนดหนึ่ง คุณสามารถใช้เคล็ดลับได้: เพิ่มป้ายกำกับที่มีการเว้นวรรคจำนวนมากสำหรับค่า

  3. คุณสามารถทำมันให้สำเร็จได้ด้วยขอบที่มองไม่เห็น

จุดที่ 2 และ 3 แสดงในตัวอย่างที่แก้ไขด้านล่าง:

digraph {
        graph [splines=ortho];

        /* Node customization. */
        node [shape=box];
        join [shape=point];
        set [label="set\npoint"];

        /* Define node levels; driving elements on top, feed back below. */
        { rank = min; set; PID; P1; P2; join; OUT;}
        { rank = max; M1;}

        /* Edges */
        set -> PID;
        P2-> join [arrowhead=none];
        join -> {OUT; M1}
        PID -> M1 [dir=back];


        PID -> P1 -> P2 [label="               "] /* #2 increase space between specific nodes */
        P1 -> M1 [style=invis] /* #3 align P1 an M1 */
}

ผลลัพธ์:

ตัวอย่าง

person Dany    schedule 18.11.2019