plotting – How to plot a schematic plot containing arbitrary smooth curves?

The key is in generating a BezierCurve or some such construct. Here is a version built by hand, just because this was more fun than the actual work I had to do right now 🙂

blue = RGBColor(0.3, 0.45, 1)
green = RGBColor(0.25, 0.35, 0.15);

Show({
  Plot(Style(4 x - 2, Black, Dashed), {x, 0.5, 4}),
  Plot(Style(1/2 x + 4, Black, Dashed), {x, 0, 2.5}, 
   PlotStyle -> Dashed),
  Plot(Style(1/2 x + 1, Black, Dashed), {x, -1, 1.5}, 
   PlotStyle -> Dashed),
  Graphics({
    blue, Thickness(0.01),
    Arrowheads({{0.06, 0.3}, {0.06, 0.95}}),
    Arrow@BezierCurve({{4, 14}, {2, 5.9}, {1.8, 4.8}, {0, 4}})
    }),
  Graphics({
    green, Thickness(0.01),
    Arrowheads({{0.06, 0.97}}),
    Arrow@BezierCurve({{4, 14}, {0.8, 1}, {0.9, 1.3}, {-1, 0.5}})
    }),
  Graphics({
    Inset(Style("Glass", 24), {0.8, 7}),
    Inset(Style("Liquid", 24), {2.7, 12}),
    blue, 
    Inset(Style(StandardForm@"!(*SubscriptBox((q), (1)))", 
      24), {0.5, 5.2}),
    green, 
    Inset(Style(StandardForm@"!(*SubscriptBox((q), (2)))", 
      24), {-0.7, 1.5})
   })
 },
 Frame -> True, Axes -> False,
 FrameLabel -> {"T", "V, H"},
 FrameStyle -> Directive(Black, 24, Thickness(0.01)),
 FrameTicks -> {
   {None, None},
   {
    {
     {12/7, 
      Style(StandardForm@"!(*SubscriptBox((T), (g1)))", blue, 
       Bold),
      {0.03, 0}, Thickness(0.01)},
     {6/7, 
      Style(StandardForm@"!(*SubscriptBox((T), (g2)))", green,
        Bold),
      {0.03, 0}, Thickness(0.01)}},
    None
   }
  },
 PlotRange -> {{-1.5, 4.5}, {-2, 15}},
 AspectRatio -> 0.8, ImageSize -> Large
)

result of code above, resembling desired plot